/*
 * Ext JS Library 1.1.1
 * Copyright(c) 2006-2007, Ext JS, LLC.
 * licensing@extjs.com
 * 
 * http://www.extjs.com/license
 */

Ext.DomHelper = function()
{
  var L = null;
  var F = /^(?:br|frame|hr|img|input|link|meta|range|spacer|wbr|area|param|col)$/i;
  var B = /^table|tbody|tr|td$/i;
  var A = function(T)
  {
    if (typeof T == "string")
    {
      return T
    }
    var P = "";
    if (!T.tag)
    {
      T.tag = "div"
    }
    P += "<" + T.tag;
    for (var O in T)
    {
      if (O == "tag" || O == "children" || O == "cn" || O == "html" || typeof T[O] == "function")
      {
        continue
      }
      if (O == "style")
      {
        var S = T["style"];
        if (typeof S == "function")
        {
          S = S.call()
        }
        if (typeof S == "string")
        {
          P += " style=\"" + S + "\""
        } else
        {
          if (typeof S == "object")
          {
            P += " style=\"";
            for (var R in S)
            {
              if (typeof S[R] != "function")
              {
                P += R + ":" + S[R] + ";"
              }
            }
            P += "\""
          }
        }
      } else
      {
        if (O == "cls")
        {
          P += " class=\"" + T["cls"] + "\""
        } else
        {
          if (O == "htmlFor")
          {
            P += " for=\"" + T["htmlFor"] + "\""
          } else
          {
            P += " " + O + "=\"" + T[O] + "\""
          }
        }
      }
    }
    if (F.test(T.tag))
    {
      P += "/>"
    } else
    {
      P += ">";
      var U = T.children || T.cn;
      if (U)
      {
        if (U instanceof Array)
        {
          for (var Q = 0,N = U.length; Q < N; Q++)
          {
            P += A(U[Q], P)
          }
        } else
        {
          P += A(U, P)
        }
      }
      if (T.html)
      {
        P += T.html
      }
      P += "</" + T.tag + ">"
    }
    return P
  };
  var M = function(T, P)
  {
    var S = document.createElement(T.tag || "div");
    var Q = S.setAttribute ? true : false;
    for (var O in T)
    {
      if (O == "tag" || O == "children" || O == "cn" || O == "html" || O == "style" || typeof T[O] == "function")
      {
        continue
      }
      if (O == "cls")
      {
        S.className = T["cls"]
      } else
      {
        if (Q)
        {
          S.setAttribute(O, T[O])
        } else
        {
          S[O] = T[O]
        }
      }
    }
    Ext.DomHelper.applyStyles(S, T.style);
    var U = T.children || T.cn;
    if (U)
    {
      if (U instanceof Array)
      {
        for (var R = 0,N = U.length; R < N; R++)
        {
          M(U[R], S)
        }
      } else
      {
        M(U, S)
      }
    }
    if (T.html)
    {
      S.innerHTML = T.html
    }
    if (P)
    {
      P.appendChild(S)
    }
    return S
  };
  var I = function(S, Q, P, R)
  {
    L.innerHTML = [Q,P,R].join("");
    var N = -1,O = L;
    while (++N < S)
    {
      O = O.firstChild
    }
    return O
  };
  var J = "<table>",E = "</table>",C = J + "<tbody>",K = "</tbody>" + E,H = C + "<tr>",D = "</tr>" + K;
  var G = function(N, O, Q, P)
  {
    if (!L)
    {
      L = document.createElement("div")
    }
    var R;
    var S = null;
    if (N == "td")
    {
      if (O == "afterbegin" || O == "beforeend")
      {
        return
      }
      if (O == "beforebegin")
      {
        S = Q;
        Q = Q.parentNode
      } else
      {
        S = Q.nextSibling;
        Q = Q.parentNode
      }
      R = I(4, H, P, D)
    } else
    {
      if (N == "tr")
      {
        if (O == "beforebegin")
        {
          S = Q;
          Q = Q.parentNode;
          R = I(3, C, P, K)
        } else
        {
          if (O == "afterend")
          {
            S = Q.nextSibling;
            Q = Q.parentNode;
            R = I(3, C, P, K)
          } else
          {
            if (O == "afterbegin")
            {
              S = Q.firstChild
            }
            R = I(4, H, P, D)
          }
        }
      } else
      {
        if (N == "tbody")
        {
          if (O == "beforebegin")
          {
            S = Q;
            Q = Q.parentNode;
            R = I(2, J, P, E)
          } else
          {
            if (O == "afterend")
            {
              S = Q.nextSibling;
              Q = Q.parentNode;
              R = I(2, J, P, E)
            } else
            {
              if (O == "afterbegin")
              {
                S = Q.firstChild
              }
              R = I(3, C, P, K)
            }
          }
        } else
        {
          if (O == "beforebegin" || O == "afterend")
          {
            return
          }
          if (O == "afterbegin")
          {
            S = Q.firstChild
          }
          R = I(2, J, P, E)
        }
      }
    }
    Q.insertBefore(R, S);
    return R
  };
  return{useDom:false,markup:function(N)
  {
    return A(N)
  },applyStyles:function(P, Q)
  {
    if (Q)
    {
      P = Ext.fly(P);
      if (typeof Q == "string")
      {
        var O = /\s?([a-z\-]*)\:\s?([^;]*);?/gi;
        var R;
        while ((R = O.exec(Q)) != null)
        {
          P.setStyle(R[1], R[2])
        }
      } else
      {
        if (typeof Q == "object")
        {
          for (var N in Q)
          {
            P.setStyle(N, Q[N])
          }
        } else
        {
          if (typeof Q == "function")
          {
            Ext.DomHelper.applyStyles(P, Q.call())
          }
        }
      }
    }
  },insertHtml:function(P, R, Q)
  {
    P = P.toLowerCase();
    if (R.insertAdjacentHTML)
    {
      if (B.test(R.tagName))
      {
        var O;
        if (O = G(R.tagName.toLowerCase(), P, R, Q))
        {
          return O
        }
      }
      switch (P)
          {case"beforebegin":R.insertAdjacentHTML("BeforeBegin", Q);return R.previousSibling;case"afterbegin":R.insertAdjacentHTML("AfterBegin", Q);return R.firstChild;case"beforeend":R.insertAdjacentHTML("BeforeEnd", Q);return R.lastChild;case"afterend":R.insertAdjacentHTML("AfterEnd", Q);return R.nextSibling}
      throw"Illegal insertion point -> \"" + P + "\""
    }
    var N = R.ownerDocument.createRange();
    var S;
    switch (P)
        {case"beforebegin":N.setStartBefore(R);S = N.createContextualFragment(Q);R.parentNode.insertBefore(S, R);return R.previousSibling;case"afterbegin":if (R.firstChild)
    {
      N.setStartBefore(R.firstChild);
      S = N.createContextualFragment(Q);
      R.insertBefore(S, R.firstChild);
      return R.firstChild
    } else
    {
      R.innerHTML = Q;
      return R.firstChild
    }case"beforeend":if (R.lastChild)
    {
      N.setStartAfter(R.lastChild);
      S = N.createContextualFragment(Q);
      R.appendChild(S);
      return R.lastChild
    } else
    {
      R.innerHTML = Q;
      return R.lastChild
    }case"afterend":N.setStartAfter(R);S = N.createContextualFragment(Q);R.parentNode.insertBefore(S, R.nextSibling);return R.nextSibling}
    throw"Illegal insertion point -> \"" + P + "\""
  },insertBefore:function(N, P, O)
  {
    return this.doInsert(N, P, O, "beforeBegin")
  },insertAfter:function(N, P, O)
  {
    return this.doInsert(N, P, O, "afterEnd", "nextSibling")
  },insertFirst:function(N, P, O)
  {
    return this.doInsert(N, P, O, "afterBegin")
  },doInsert:function(Q, S, R, T, P)
  {
    Q = Ext.getDom(Q);
    var O;
    if (this.useDom)
    {
      O = M(S, null);
      Q.parentNode.insertBefore(O, P ? Q[P] : Q)
    } else
    {
      var N = A(S);
      O = this.insertHtml(T, Q, N)
    }
    return R ? Ext.get(O, true) : O
  },append:function(P, R, Q)
  {
    P = Ext.getDom(P);
    var O;
    if (this.useDom)
    {
      O = M(R, null);
      P.appendChild(O)
    } else
    {
      var N = A(R);
      O = this.insertHtml("beforeEnd", P, N)
    }
    return Q ? Ext.get(O, true) : O
  },overwrite:function(N, P, O)
  {
    N = Ext.getDom(N);
    N.innerHTML = A(P);
    return O ? Ext.get(N.firstChild, true) : N.firstChild
  },createTemplate:function(O)
  {
    var N = A(O);
    return new Ext.Template(N)
  }}
}();
Ext.Template = function(A)
{
  if (A instanceof Array)
  {
    A = A.join("")
  } else
  {
    if (arguments.length > 1)
    {
      A = Array.prototype.join.call(arguments, "")
    }
  }
  this.html = A
};
Ext.Template.prototype = {applyTemplate:function(B)
{
  if (this.compiled)
  {
    return this.compiled(B)
  }
  var A = this.disableFormats !== true;
  var E = Ext.util.Format,C = this;
  var D = function(G, I, L, H)
  {
    if (L && A)
    {
      if (L.substr(0, 5) == "this.")
      {
        return C.call(L.substr(5), B[I], B)
      } else
      {
        if (H)
        {
          var K = /^\s*['"](.*)["']\s*$/;
          H = H.split(",");
          for (var J = 0,F = H.length; J < F; J++)
          {
            H[J] = H[J].replace(K, "$1")
          }
          H = [B[I]].concat(H)
        } else
        {
          H = [B[I]]
        }
        return E[L].apply(E, H)
      }
    } else
    {
      return B[I] !== undefined ? B[I] : ""
    }
  };
  return this.html.replace(this.re, D)
},set:function(A, B)
{
  this.html = A;
  this.compiled = null;
  if (B)
  {
    this.compile()
  }
  return this
},disableFormats:false,re:/\{([\w-]+)(?:\:([\w\.]*)(?:\((.*?)?\))?)?\}/g,compile:function()
{
  var fm = Ext.util.Format;
  var useF = this.disableFormats !== true;
  var sep = Ext.isGecko ? "+" : ",";
  var fn = function(m, name, format, args)
  {
    if (format && useF)
    {
      args = args ? "," + args : "";
      if (format.substr(0, 5) != "this.")
      {
        format = "fm." + format + "("
      } else
      {
        format = "this.call(\"" + format.substr(5) + "\", ";
        args = ", values"
      }
    } else
    {
      args = "";
      format = "(values['" + name + "'] == undefined ? '' : "
    }
    return"'" + sep + format + "values['" + name + "']" + args + ")" + sep + "'"
  };
  var body;
  if (Ext.isGecko)
  {
    body = "this.compiled = function(values){ return '" + this.html.replace(/\\/g, "\\\\").replace(/(\r\n|\n)/g, "\\n").replace(/'/g, "\\'").replace(this.re, fn) + "';};"
  } else
  {
    body = ["this.compiled = function(values){ return ['"];
    body.push(this.html.replace(/\\/g, "\\\\").replace(/(\r\n|\n)/g, "\\n").replace(/'/g, "\\'").replace(this.re, fn));
    body.push("'].join('');};");
    body = body.join("")
  }
  eval(body);
  return this
},call:function(C, B, A)
{
  return this[C](B, A)
},insertFirst:function(B, A, C)
{
  return this.doInsert("afterBegin", B, A, C)
},insertBefore:function(B, A, C)
{
  return this.doInsert("beforeBegin", B, A, C)
},insertAfter:function(B, A, C)
{
  return this.doInsert("afterEnd", B, A, C)
},append:function(B, A, C)
{
  return this.doInsert("beforeEnd", B, A, C)
},doInsert:function(C, E, B, A)
{
  E = Ext.getDom(E);
  var D = Ext.DomHelper.insertHtml(C, E, this.applyTemplate(B));
  return A ? Ext.get(D, true) : D
},overwrite:function(B, A, C)
{
  B = Ext.getDom(B);
  B.innerHTML = this.applyTemplate(A);
  return C ? Ext.get(B.firstChild, true) : B.firstChild
}};
Ext.Template.prototype.apply = Ext.Template.prototype.applyTemplate;
Ext.DomHelper.Template = Ext.Template;
Ext.Template.from = function(A)
{
  A = Ext.getDom(A);
  return new Ext.Template(A.value || A.innerHTML)
};
Ext.DomQuery = function()
{
  var cache = {},simpleCache = {},valueCache = {};
  var nonSpace = /\S/;
  var trimRe = /^\s+|\s+$/g;
  var tplRe = /\{(\d+)\}/g;
  var modeRe = /^(\s?[\/>+~]\s?|\s|$)/;
  var tagTokenRe = /^(#)?([\w-\*]+)/;
  var nthRe = /(\d*)n\+?(\d*)/,nthRe2 = /\D/;
  function child(p, index)
  {
    var i = 0;
    var n = p.firstChild;
    while (n)
    {
      if (n.nodeType == 1)
      {
        if (++i == index)
        {
          return n
        }
      }
      n = n.nextSibling
    }
    return null
  }
  function next(n)
  {
    while ((n = n.nextSibling) && n.nodeType != 1)
    {
    }
    return n
  }
  function prev(n)
  {
    while ((n = n.previousSibling) && n.nodeType != 1)
    {
    }
    return n
  }
  function children(d)
  {
    var n = d.firstChild,ni = -1;
    while (n)
    {
      var nx = n.nextSibling;
      if (n.nodeType == 3 && !nonSpace.test(n.nodeValue))
      {
        d.removeChild(n)
      } else
      {
        n.nodeIndex = ++ni
      }
      n = nx
    }
    return this
  }
  function byClassName(c, a, v)
  {
    if (!v)
    {
      return c
    }
    var r = [],ri = -1,cn;
    for (var i = 0,ci; ci = c[i]; i++)
    {
      if ((" " + ci.className + " ").indexOf(v) != -1)
      {
        r[++ri] = ci
      }
    }
    return r
  }
  function attrValue(n, attr)
  {
    if (!n.tagName && typeof n.length != "undefined")
    {
      n = n[0]
    }
    if (!n)
    {
      return null
    }
    if (attr == "for")
    {
      return n.htmlFor
    }
    if (attr == "class" || attr == "className")
    {
      return n.className
    }
    return n.getAttribute(attr) || n[attr]
  }
  function getNodes(ns, mode, tagName)
  {
    var result = [],ri = -1,cs;
    if (!ns)
    {
      return result
    }
    tagName = tagName || "*";
    if (typeof ns.getElementsByTagName != "undefined")
    {
      ns = [ns]
    }
    if (!mode)
    {
      for (var i = 0,ni; ni = ns[i]; i++)
      {
        cs = ni.getElementsByTagName(tagName);
        for (var j = 0,ci; ci = cs[j]; j++)
        {
          result[++ri] = ci
        }
      }
    } else
    {
      if (mode == "/" || mode == ">")
      {
        var utag = tagName.toUpperCase();
        for (var i = 0,ni,cn; ni = ns[i]; i++)
        {
          cn = ni.children || ni.childNodes;
          for (var j = 0,cj; cj = cn[j]; j++)
          {
            if (cj.nodeName == utag || cj.nodeName == tagName || tagName == "*")
            {
              result[++ri] = cj
            }
          }
        }
      } else
      {
        if (mode == "+")
        {
          var utag = tagName.toUpperCase();
          for (var i = 0,n; n = ns[i]; i++)
          {
            while ((n = n.nextSibling) && n.nodeType != 1)
            {
            }
            if (n && (n.nodeName == utag || n.nodeName == tagName || tagName == "*"))
            {
              result[++ri] = n
            }
          }
        } else
        {
          if (mode == "~")
          {
            for (var i = 0,n; n = ns[i]; i++)
            {
              while ((n = n.nextSibling) && (n.nodeType != 1 || (tagName == "*" || n.tagName.toLowerCase() != tagName)))
              {
              }
              if (n)
              {
                result[++ri] = n
              }
            }
          }
        }
      }
    }
    return result
  }
  function concat(a, b)
  {
    if (b.slice)
    {
      return a.concat(b)
    }
    for (var i = 0,l = b.length; i < l; i++)
    {
      a[a.length] = b[i]
    }
    return a
  }
  function byTag(cs, tagName)
  {
    if (cs.tagName || cs == document)
    {
      cs = [cs]
    }
    if (!tagName)
    {
      return cs
    }
    var r = [],ri = -1;
    tagName = tagName.toLowerCase();
    for (var i = 0,ci; ci = cs[i]; i++)
    {
      if (ci.nodeType == 1 && ci.tagName.toLowerCase() == tagName)
      {
        r[++ri] = ci
      }
    }
    return r
  }
  function byId(cs, attr, id)
  {
    if (cs.tagName || cs == document)
    {
      cs = [cs]
    }
    if (!id)
    {
      return cs
    }
    var r = [],ri = -1;
    for (var i = 0,ci; ci = cs[i]; i++)
    {
      if (ci && ci.id == id)
      {
        r[++ri] = ci;
        return r
      }
    }
    return r
  }
  function byAttribute(cs, attr, value, op, custom)
  {
    var r = [],ri = -1,st = custom == "{";
    var f = Ext.DomQuery.operators[op];
    for (var i = 0,ci; ci = cs[i]; i++)
    {
      var a;
      if (st)
      {
        a = Ext.DomQuery.getStyle(ci, attr)
      } else
      {
        if (attr == "class" || attr == "className")
        {
          a = ci.className
        } else
        {
          if (attr == "for")
          {
            a = ci.htmlFor
          } else
          {
            if (attr == "href")
            {
              a = ci.getAttribute("href", 2)
            } else
            {
              a = ci.getAttribute(attr)
            }
          }
        }
      }
      if ((f && f(a, value)) || (!f && a))
      {
        r[++ri] = ci
      }
    }
    return r
  }
  function byPseudo(cs, name, value)
  {
    return Ext.DomQuery.pseudos[name](cs, value)
  }
  var isIE = window.ActiveXObject ? true : false;
  eval("var batch = 30803;");
  var key = 30803;
  function nodupIEXml(cs)
  {
    var d = ++key;
    cs[0].setAttribute("_nodup", d);
    var r = [cs[0]];
    for (var i = 1,len = cs.length; i < len; i++)
    {
      var c = cs[i];
      if (!c.getAttribute("_nodup") != d)
      {
        c.setAttribute("_nodup", d);
        r[r.length] = c
      }
    }
    for (var i = 0,len = cs.length; i < len; i++)
    {
      cs[i].removeAttribute("_nodup")
    }
    return r
  }
  function nodup(cs)
  {
    if (!cs)
    {
      return[]
    }
    var len = cs.length,c,i,r = cs,cj,ri = -1;
    if (!len || typeof cs.nodeType != "undefined" || len == 1)
    {
      return cs
    }
    if (isIE && typeof cs[0].selectSingleNode != "undefined")
    {
      return nodupIEXml(cs)
    }
    var d = ++key;
    cs[0]._nodup = d;
    for (i = 1; c = cs[i]; i++)
    {
      if (c._nodup != d)
      {
        c._nodup = d
      } else
      {
        r = [];
        for (var j = 0; j < i; j++)
        {
          r[++ri] = cs[j]
        }
        for (j = i + 1; cj = cs[j]; j++)
        {
          if (cj._nodup != d)
          {
            cj._nodup = d;
            r[++ri] = cj
          }
        }
        return r
      }
    }
    return r
  }
  function quickDiffIEXml(c1, c2)
  {
    var d = ++key;
    for (var i = 0,len = c1.length; i < len; i++)
    {
      c1[i].setAttribute("_qdiff", d)
    }
    var r = [];
    for (var i = 0,len = c2.length; i < len; i++)
    {
      if (c2[i].getAttribute("_qdiff") != d)
      {
        r[r.length] = c2[i]
      }
    }
    for (var i = 0,len = c1.length; i < len; i++)
    {
      c1[i].removeAttribute("_qdiff")
    }
    return r
  }
  function quickDiff(c1, c2)
  {
    var len1 = c1.length;
    if (!len1)
    {
      return c2
    }
    if (isIE && c1[0].selectSingleNode)
    {
      return quickDiffIEXml(c1, c2)
    }
    var d = ++key;
    for (var i = 0; i < len1; i++)
    {
      c1[i]._qdiff = d
    }
    var r = [];
    for (var i = 0,len = c2.length; i < len; i++)
    {
      if (c2[i]._qdiff != d)
      {
        r[r.length] = c2[i]
      }
    }
    return r
  }
  function quickId(ns, mode, root, id)
  {
    if (ns == root)
    {
      var d = root.ownerDocument || root;
      return d.getElementById(id)
    }
    ns = getNodes(ns, mode, "*");
    return byId(ns, null, id)
  }
  return{getStyle:function(el, name)
  {
    return Ext.fly(el).getStyle(name)
  },compile:function(path, type)
  {
    type = type || "select";
    var fn = ["var f = function(root){\n var mode; ++batch; var n = root || document;\n"];
    var q = path,mode,lq;
    var tk = Ext.DomQuery.matchers;
    var tklen = tk.length;
    var mm;
    var lmode = q.match(modeRe);
    if (lmode && lmode[1])
    {
      fn[fn.length] = "mode=\"" + lmode[1].replace(trimRe, "") + "\";";
      q = q.replace(lmode[1], "")
    }
    while (path.substr(0, 1) == "/")
    {
      path = path.substr(1)
    }
    while (q && lq != q)
    {
      lq = q;
      var tm = q.match(tagTokenRe);
      if (type == "select")
      {
        if (tm)
        {
          if (tm[1] == "#")
          {
            fn[fn.length] = "n = quickId(n, mode, root, \"" + tm[2] + "\");"
          } else
          {
            fn[fn.length] = "n = getNodes(n, mode, \"" + tm[2] + "\");"
          }
          q = q.replace(tm[0], "")
        } else
        {
          if (q.substr(0, 1) != "@")
          {
            fn[fn.length] = "n = getNodes(n, mode, \"*\");"
          }
        }
      } else
      {
        if (tm)
        {
          if (tm[1] == "#")
          {
            fn[fn.length] = "n = byId(n, null, \"" + tm[2] + "\");"
          } else
          {
            fn[fn.length] = "n = byTag(n, \"" + tm[2] + "\");"
          }
          q = q.replace(tm[0], "")
        }
      }
      while (!(mm = q.match(modeRe)))
      {
        var matched = false;
        for (var j = 0; j < tklen; j++)
        {
          var t = tk[j];
          var m = q.match(t.re);
          if (m)
          {
            fn[fn.length] = t.select.replace(tplRe, function(x, i)
            {
              return m[i]
            });
            q = q.replace(m[0], "");
            matched = true;
            break
          }
        }
        if (!matched)
        {
          throw"Error parsing selector, parsing failed at \"" + q + "\""
        }
      }
      if (mm[1])
      {
        fn[fn.length] = "mode=\"" + mm[1].replace(trimRe, "") + "\";";
        q = q.replace(mm[1], "")
      }
    }
    fn[fn.length] = "return nodup(n);\n}";
    eval(fn.join(""));
    return f
  },select:function(path, root, type)
  {
    if (!root || root == document)
    {
      root = document
    }
    if (typeof root == "string")
    {
      root = document.getElementById(root)
    }
    var paths = path.split(",");
    var results = [];
    for (var i = 0,len = paths.length; i < len; i++)
    {
      var p = paths[i].replace(trimRe, "");
      if (!cache[p])
      {
        cache[p] = Ext.DomQuery.compile(p);
        if (!cache[p])
        {
          throw p + " is not a valid selector"
        }
      }
      var result = cache[p](root);
      if (result && result != document)
      {
        results = results.concat(result)
      }
    }
    if (paths.length > 1)
    {
      return nodup(results)
    }
    return results
  },selectNode:function(path, root)
  {
    return Ext.DomQuery.select(path, root)[0]
  },selectValue:function(path, root, defaultValue)
  {
    path = path.replace(trimRe, "");
    if (!valueCache[path])
    {
      valueCache[path] = Ext.DomQuery.compile(path, "select")
    }
    var n = valueCache[path](root);
    n = n[0] ? n[0] : n;
    var v = (n && n.firstChild ? n.firstChild.nodeValue : null);
    return((v === null || v === undefined || v === "") ? defaultValue : v)
  },selectNumber:function(path, root, defaultValue)
  {
    var v = Ext.DomQuery.selectValue(path, root, defaultValue || 0);
    return parseFloat(v)
  },is:function(el, ss)
  {
    if (typeof el == "string")
    {
      el = document.getElementById(el)
    }
    var isArray = (el instanceof Array);
    var result = Ext.DomQuery.filter(isArray ? el : [el], ss);
    return isArray ? (result.length == el.length) : (result.length > 0)
  },filter:function(els, ss, nonMatches)
  {
    ss = ss.replace(trimRe, "");
    if (!simpleCache[ss])
    {
      simpleCache[ss] = Ext.DomQuery.compile(ss, "simple")
    }
    var result = simpleCache[ss](els);
    return nonMatches ? quickDiff(result, els) : result
  },matchers:[{re:/^\.([\w-]+)/,select:"n = byClassName(n, null, \" {1} \");"},{re:/^\:([\w-]+)(?:\(((?:[^\s>\/]*|.*?))\))?/,select:"n = byPseudo(n, \"{1}\", \"{2}\");"},{re:/^(?:([\[\{])(?:@)?([\w-]+)\s?(?:(=|.=)\s?['"]?(.*?)["']?)?[\]\}])/,select:"n = byAttribute(n, \"{2}\", \"{4}\", \"{3}\", \"{1}\");"},{re:/^#([\w-]+)/,select:"n = byId(n, null, \"{1}\");"},{re:/^@([\w-]+)/,select:"return {firstChild:{nodeValue:attrValue(n, \"{1}\")}};"}],operators:{"=":function(a, v)
  {
    return a == v
  },"!=":function(a, v)
  {
    return a != v
  },"^=":function(a, v)
  {
    return a && a.substr(0, v.length) == v
  },"$=":function(a, v)
  {
    return a && a.substr(a.length - v.length) == v
  },"*=":function(a, v)
  {
    return a && a.indexOf(v) !== -1
  },"%=":function(a, v)
  {
    return(a % v) == 0
  },"|=":function(a, v)
  {
    return a && (a == v || a.substr(0, v.length + 1) == v + "-")
  },"~=":function(a, v)
  {
    return a && (" " + a + " ").indexOf(" " + v + " ") != -1
  }},pseudos:{"first-child":function(c)
  {
    var r = [],ri = -1,n;
    for (var i = 0,ci; ci = n = c[i]; i++)
    {
      while ((n = n.previousSibling) && n.nodeType != 1)
      {
      }
      if (!n)
      {
        r[++ri] = ci
      }
    }
    return r
  },"last-child":function(c)
  {
    var r = [],ri = -1,n;
    for (var i = 0,ci; ci = n = c[i]; i++)
    {
      while ((n = n.nextSibling) && n.nodeType != 1)
      {
      }
      if (!n)
      {
        r[++ri] = ci
      }
    }
    return r
  },"nth-child":function(c, a)
  {
    var r = [],ri = -1;
    var m = nthRe.exec(a == "even" && "2n" || a == "odd" && "2n+1" || !nthRe2.test(a) && "n+" + a || a);
    var f = (m[1] || 1) - 0,l = m[2] - 0;
    for (var i = 0,n; n = c[i]; i++)
    {
      var pn = n.parentNode;
      if (batch != pn._batch)
      {
        var j = 0;
        for (var cn = pn.firstChild; cn; cn = cn.nextSibling)
        {
          if (cn.nodeType == 1)
          {
            cn.nodeIndex = ++j
          }
        }
        pn._batch = batch
      }
      if (f == 1)
      {
        if (l == 0 || n.nodeIndex == l)
        {
          r[++ri] = n
        }
      } else
      {
        if ((n.nodeIndex + l) % f == 0)
        {
          r[++ri] = n
        }
      }
    }
    return r
  },"only-child":function(c)
  {
    var r = [],ri = -1;
    for (var i = 0,ci; ci = c[i]; i++)
    {
      if (!prev(ci) && !next(ci))
      {
        r[++ri] = ci
      }
    }
    return r
  },"empty":function(c)
  {
    var r = [],ri = -1;
    for (var i = 0,ci; ci = c[i]; i++)
    {
      var cns = ci.childNodes,j = 0,cn,empty = true;
      while (cn = cns[j])
      {
        ++j;
        if (cn.nodeType == 1 || cn.nodeType == 3)
        {
          empty = false;
          break
        }
      }
      if (empty)
      {
        r[++ri] = ci
      }
    }
    return r
  },"contains":function(c, v)
  {
    var r = [],ri = -1;
    for (var i = 0,ci; ci = c[i]; i++)
    {
      if ((ci.textContent || ci.innerText || "").indexOf(v) != -1)
      {
        r[++ri] = ci
      }
    }
    return r
  },"nodeValue":function(c, v)
  {
    var r = [],ri = -1;
    for (var i = 0,ci; ci = c[i]; i++)
    {
      if (ci.firstChild && ci.firstChild.nodeValue == v)
      {
        r[++ri] = ci
      }
    }
    return r
  },"checked":function(c)
  {
    var r = [],ri = -1;
    for (var i = 0,ci; ci = c[i]; i++)
    {
      if (ci.checked == true)
      {
        r[++ri] = ci
      }
    }
    return r
  },"not":function(c, ss)
  {
    return Ext.DomQuery.filter(c, ss, true)
  },"odd":function(c)
  {
    return this["nth-child"](c, "odd")
  },"even":function(c)
  {
    return this["nth-child"](c, "even")
  },"nth":function(c, a)
  {
    return c[a - 1] || []
  },"first":function(c)
  {
    return c[0] || []
  },"last":function(c)
  {
    return c[c.length - 1] || []
  },"has":function(c, ss)
  {
    var s = Ext.DomQuery.select;
    var r = [],ri = -1;
    for (var i = 0,ci; ci = c[i]; i++)
    {
      if (s(ss, ci).length > 0)
      {
        r[++ri] = ci
      }
    }
    return r
  },"next":function(c, ss)
  {
    var is = Ext.DomQuery.is;
    var r = [],ri = -1;
    for (var i = 0,ci; ci = c[i]; i++)
    {
      var n = next(ci);
      if (n && is(n, ss))
      {
        r[++ri] = ci
      }
    }
    return r
  },"prev":function(c, ss)
  {
    var is = Ext.DomQuery.is;
    var r = [],ri = -1;
    for (var i = 0,ci; ci = c[i]; i++)
    {
      var n = prev(ci);
      if (n && is(n, ss))
      {
        r[++ri] = ci
      }
    }
    return r
  }}}
}();
Ext.query = Ext.DomQuery.select;
Ext.util.Observable = function()
{
  if (this.listeners)
  {
    this.on(this.listeners);
    delete this.listeners
  }
};
Ext.util.Observable.prototype = {fireEvent:function()
{
  var A = this.events[arguments[0].toLowerCase()];
  if (typeof A == "object")
  {
    return A.fire.apply(A, Array.prototype.slice.call(arguments, 1))
  } else
  {
    return true
  }
},filterOptRe:/^(?:scope|delay|buffer|single)$/,addListener:function(A, C, B, F)
{
  if (typeof A == "object")
  {
    F = A;
    for (var E in F)
    {
      if (this.filterOptRe.test(E))
      {
        continue
      }
      if (typeof F[E] == "function")
      {
        this.addListener(E, F[E], F.scope, F)
      } else
      {
        this.addListener(E, F[E].fn, F[E].scope, F[E])
      }
    }
    return
  }
  F = (!F || typeof F == "boolean") ? {} : F;
  A = A.toLowerCase();
  var D = this.events[A] || true;
  if (typeof D == "boolean")
  {
    D = new Ext.util.Event(this, A);
    this.events[A] = D
  }
  D.addListener(C, B, F)
},removeListener:function(A, C, B)
{
  var D = this.events[A.toLowerCase()];
  if (typeof D == "object")
  {
    D.removeListener(C, B)
  }
},purgeListeners:function()
{
  for (var A in this.events)
  {
    if (typeof this.events[A] == "object")
    {
      this.events[A].clearListeners()
    }
  }
},relayEvents:function(F, D)
{
  var E = function(G)
  {
    return function()
    {
      return this.fireEvent.apply(this, Ext.combine(G, Array.prototype.slice.call(arguments, 0)))
    }
  };
  for (var C = 0,A = D.length; C < A; C++)
  {
    var B = D[C];
    if (!this.events[B])
    {
      this.events[B] = true
    }
    F.on(B, E(B), this)
  }
},addEvents:function(A)
{
  if (!this.events)
  {
    this.events = {}
  }
  Ext.applyIf(this.events, A)
},hasListener:function(A)
{
  var B = this.events[A];
  return typeof B == "object" && B.listeners.length > 0
}};
Ext.util.Observable.prototype.on = Ext.util.Observable.prototype.addListener;
Ext.util.Observable.prototype.un = Ext.util.Observable.prototype.removeListener;
Ext.util.Observable.capture = function(C, B, A)
{
  C.fireEvent = C.fireEvent.createInterceptor(B, A)
};
Ext.util.Observable.releaseCapture = function(A)
{
  A.fireEvent = Ext.util.Observable.prototype.fireEvent
};
(function()
{
  var B = function(F, G, E)
  {
    var D = new Ext.util.DelayedTask();
    return function()
    {
      D.delay(G.buffer, F, E, Array.prototype.slice.call(arguments, 0))
    }
  };
  var C = function(F, G, E, D)
  {
    return function()
    {
      G.removeListener(E, D);
      return F.apply(D, arguments)
    }
  };
  var A = function(E, F, D)
  {
    return function()
    {
      var G = Array.prototype.slice.call(arguments, 0);
      setTimeout(function()
      {
        E.apply(D, G)
      }, F.delay || 10)
    }
  };
  Ext.util.Event = function(E, D)
  {
    this.name = D;
    this.obj = E;
    this.listeners = []
  };
  Ext.util.Event.prototype = {addListener:function(H, G, E)
  {
    var I = E || {};
    G = G || this.obj;
    if (!this.isListening(H, G))
    {
      var D = {fn:H,scope:G,options:I};
      var F = H;
      if (I.delay)
      {
        F = A(F, I, G)
      }
      if (I.single)
      {
        F = C(F, this, H, G)
      }
      if (I.buffer)
      {
        F = B(F, I, G)
      }
      D.fireFn = F;
      if (!this.firing)
      {
        this.listeners.push(D)
      } else
      {
        this.listeners = this.listeners.slice(0);
        this.listeners.push(D)
      }
    }
  },findListener:function(I, H)
  {
    H = H || this.obj;
    var F = this.listeners;
    for (var G = 0,D = F.length; G < D; G++)
    {
      var E = F[G];
      if (E.fn == I && E.scope == H)
      {
        return G
      }
    }
    return -1
  },isListening:function(E, D)
  {
    return this.findListener(E, D) != -1
  },removeListener:function(F, E)
  {
    var D;
    if ((D = this.findListener(F, E)) != -1)
    {
      if (!this.firing)
      {
        this.listeners.splice(D, 1)
      } else
      {
        this.listeners = this.listeners.slice(0);
        this.listeners.splice(D, 1)
      }
      return true
    }
    return false
  },clearListeners:function()
  {
    this.listeners = []
  },fire:function()
  {
    var F = this.listeners,I,D = F.length;
    if (D > 0)
    {
      this.firing = true;
      var G = Array.prototype.slice.call(arguments, 0);
      for (var H = 0; H < D; H++)
      {
        var E = F[H];
        if (E.fireFn.apply(E.scope || this.obj || window, arguments) === false)
        {
          this.firing = false;
          return false
        }
      }
      this.firing = false
    }
    return true
  }}
})();
Ext.EventManager = function()
{
  var T,M,I = false;
  var K,S,C,O;
  var L = Ext.lib.Event;
  var N = Ext.lib.Dom;
  var B = function()
  {
    if (!I)
    {
      I = true;
      Ext.isReady = true;
      if (M)
      {
        clearInterval(M)
      }
      if (Ext.isGecko || Ext.isOpera)
      {
        document.removeEventListener("DOMContentLoaded", B, false)
      }
      if (Ext.isIE)
      {
        var D = document.getElementById("ie-deferred-loader");
        if (D)
        {
          D.onreadystatechange = null;
          D.parentNode.removeChild(D)
        }
      }
      if (T)
      {
        T.fire();
        T.clearListeners()
      }
    }
  };
  var A = function()
  {
    T = new Ext.util.Event();
    if (Ext.isGecko || Ext.isOpera)
    {
      document.addEventListener("DOMContentLoaded", B, false)
    } else
    {
      if (Ext.isIE)
      {
        document.write("<s" + "cript id=\"ie-deferred-loader\" defer=\"defer\" src=\"/" + "/:\"></s" + "cript>");
        var D = document.getElementById("ie-deferred-loader");
        D.onreadystatechange = function()
        {
          if (this.readyState == "complete")
          {
            B()
          }
        }
      } else
      {
        if (Ext.isSafari)
        {
          M = setInterval(function()
          {
            var E = document.readyState;
            if (E == "complete")
            {
              B()
            }
          }, 10)
        }
      }
    }
    L.on(window, "load", B)
  };
  var R = function(E, U)
  {
    var D = new Ext.util.DelayedTask(E);
    return function(V)
    {
      V = new Ext.EventObjectImpl(V);
      D.delay(U.buffer, E, null, [V])
    }
  };
  var P = function(V, U, D, E)
  {
    return function(W)
    {
      Ext.EventManager.removeListener(U, D, E);
      V(W)
    }
  };
  var F = function(D, E)
  {
    return function(U)
    {
      U = new Ext.EventObjectImpl(U);
      setTimeout(function()
      {
        D(U)
      }, E.delay || 10)
    }
  };
  var J = function(U, E, D, Y, X)
  {
    var Z = (!D || typeof D == "boolean") ? {} : D;
    Y = Y || Z.fn;
    X = X || Z.scope;
    var W = Ext.getDom(U);
    if (!W)
    {
      throw"Error listening for \"" + E + "\". Element \"" + U + "\" doesn't exist."
    }
    var V = function(b)
    {
      b = Ext.EventObject.setEvent(b);
      var a;
      if (Z.delegate)
      {
        a = b.getTarget(Z.delegate, W);
        if (!a)
        {
          return
        }
      } else
      {
        a = b.target
      }
      if (Z.stopEvent === true)
      {
        b.stopEvent()
      }
      if (Z.preventDefault === true)
      {
        b.preventDefault()
      }
      if (Z.stopPropagation === true)
      {
        b.stopPropagation()
      }
      if (Z.normalized === false)
      {
        b = b.browserEvent
      }
      Y.call(X || W, b, a, Z)
    };
    if (Z.delay)
    {
      V = F(V, Z)
    }
    if (Z.single)
    {
      V = P(V, W, E, Y)
    }
    if (Z.buffer)
    {
      V = R(V, Z)
    }
    Y._handlers = Y._handlers || [];
    Y._handlers.push([Ext.id(W),E,V]);
    L.on(W, E, V);
    if (E == "mousewheel" && W.addEventListener)
    {
      W.addEventListener("DOMMouseScroll", V, false);
      L.on(window, "unload", function()
      {
        W.removeEventListener("DOMMouseScroll", V, false)
      })
    }
    if (E == "mousedown" && W == document)
    {
      Ext.EventManager.stoppedMouseDownEvent.addListener(V)
    }
    return V
  };
  var G = function(E, U, Z)
  {
    var D = Ext.id(E),a = Z._handlers,X = Z;
    if (a)
    {
      for (var V = 0,Y = a.length; V < Y; V++)
      {
        var W = a[V];
        if (W[0] == D && W[1] == U)
        {
          X = W[2];
          a.splice(V, 1);
          break
        }
      }
    }
    L.un(E, U, X);
    E = Ext.getDom(E);
    if (U == "mousewheel" && E.addEventListener)
    {
      E.removeEventListener("DOMMouseScroll", X, false)
    }
    if (U == "mousedown" && E == document)
    {
      Ext.EventManager.stoppedMouseDownEvent.removeListener(X)
    }
  };
  var H = /^(?:scope|delay|buffer|single|stopEvent|preventDefault|stopPropagation|normalized|args|delegate)$/;
  var Q = {wrap:function(U, E, D)
  {
    return function(V)
    {
      Ext.EventObject.setEvent(V);
      U.call(D ? E || window : window, Ext.EventObject, E)
    }
  },addListener:function(U, D, W, V, E)
  {
    if (typeof D == "object")
    {
      var Y = D;
      for (var X in Y)
      {
        if (H.test(X))
        {
          continue
        }
        if (typeof Y[X] == "function")
        {
          J(U, X, Y, Y[X], Y.scope)
        } else
        {
          J(U, X, Y[X])
        }
      }
      return
    }
    return J(U, D, E, W, V)
  },removeListener:function(E, D, U)
  {
    return G(E, D, U)
  },onDocumentReady:function(U, E, D)
  {
    if (I)
    {
      T.addListener(U, E, D);
      T.fire();
      T.clearListeners();
      return
    }
    if (!T)
    {
      A()
    }
    T.addListener(U, E, D)
  },onWindowResize:function(U, E, D)
  {
    if (!K)
    {
      K = new Ext.util.Event();
      S = new Ext.util.DelayedTask(function()
      {
        K.fire(N.getViewWidth(), N.getViewHeight())
      });
      L.on(window, "resize", function()
      {
        if (Ext.isIE)
        {
          S.delay(50)
        } else
        {
          K.fire(N.getViewWidth(), N.getViewHeight())
        }
      })
    }
    K.addListener(U, E, D)
  },onTextResize:function(V, U, D)
  {
    if (!C)
    {
      C = new Ext.util.Event();
      var E = new Ext.Element(document.createElement("div"));
      E.dom.className = "x-text-resize";
      E.dom.innerHTML = "X";
      E.appendTo(document.body);
      O = E.dom.offsetHeight;
      setInterval(function()
      {
        if (E.dom.offsetHeight != O)
        {
          C.fire(O, O = E.dom.offsetHeight)
        }
      }, this.textResizeInterval)
    }
    C.addListener(V, U, D)
  },removeResizeListener:function(E, D)
  {
    if (K)
    {
      K.removeListener(E, D)
    }
  },fireResize:function()
  {
    if (K)
    {
      K.fire(N.getViewWidth(), N.getViewHeight())
    }
  },ieDeferSrc:false,textResizeInterval:50};
  Q.on = Q.addListener;
  Q.un = Q.removeListener;
  Q.stoppedMouseDownEvent = new Ext.util.Event();
  return Q
}();
Ext.onReady = Ext.EventManager.onDocumentReady;
Ext.onReady(function()
{
  var B = Ext.get(document.body);
  if (!B)
  {
    return
  }
  var A = [Ext.isIE ? "ext-ie" : Ext.isGecko ? "ext-gecko" : Ext.isOpera ? "ext-opera" : Ext.isSafari ? "ext-safari" : ""];
  if (Ext.isMac)
  {
    A.push("ext-mac")
  }
  if (Ext.isLinux)
  {
    A.push("ext-linux")
  }
  if (Ext.isBorderBox)
  {
    A.push("ext-border-box")
  }
  if (Ext.isStrict)
  {
    var C = B.dom.parentNode;
    if (C)
    {
      C.className += " ext-strict"
    }
  }
  B.addClass(A.join(" "))
});
Ext.EventObject = function()
{
  var B = Ext.lib.Event;
  var A = {63234:37,63235:39,63232:38,63233:40,63276:33,63277:34,63272:46,63273:36,63275:35};
  var C = Ext.isIE ? {1:0,4:1,2:2} : (Ext.isSafari ? {1:0,2:1,3:2} : {0:0,1:1,2:2});
  Ext.EventObjectImpl = function(D)
  {
    if (D)
    {
      this.setEvent(D.browserEvent || D)
    }
  };
  Ext.EventObjectImpl.prototype = {browserEvent:null,button:-1,shiftKey:false,ctrlKey:false,altKey:false,BACKSPACE:8,TAB:9,RETURN:13,ENTER:13,SHIFT:16,CONTROL:17,ESC:27,SPACE:32,PAGEUP:33,PAGEDOWN:34,END:35,HOME:36,LEFT:37,UP:38,RIGHT:39,DOWN:40,DELETE:46,F5:116,setEvent:function(D)
  {
    if (D == this || (D && D.browserEvent))
    {
      return D
    }
    this.browserEvent = D;
    if (D)
    {
      this.button = D.button ? C[D.button] : (D.which ? D.which - 1 : -1);
      if (D.type == "click" && this.button == -1)
      {
        this.button = 0
      }
      this.type = D.type;
      this.shiftKey = D.shiftKey;
      this.ctrlKey = D.ctrlKey || D.metaKey;
      this.altKey = D.altKey;
      this.keyCode = D.keyCode;
      this.charCode = D.charCode;
      this.target = B.getTarget(D);
      this.xy = B.getXY(D)
    } else
    {
      this.button = -1;
      this.shiftKey = false;
      this.ctrlKey = false;
      this.altKey = false;
      this.keyCode = 0;
      this.charCode = 0;
      this.target = null;
      this.xy = [0,0]
    }
    return this
  },stopEvent:function()
  {
    if (this.browserEvent)
    {
      if (this.browserEvent.type == "mousedown")
      {
        Ext.EventManager.stoppedMouseDownEvent.fire(this)
      }
      B.stopEvent(this.browserEvent)
    }
  },preventDefault:function()
  {
    if (this.browserEvent)
    {
      B.preventDefault(this.browserEvent)
    }
  },isNavKeyPress:function()
  {
    var D = this.keyCode;
    D = Ext.isSafari ? (A[D] || D) : D;
    return(D >= 33 && D <= 40) || D == this.RETURN || D == this.TAB || D == this.ESC
  },isSpecialKey:function()
  {
    var D = this.keyCode;
    return(this.type == "keypress" && this.ctrlKey) || D == 9 || D == 13 || D == 40 || D == 27 || (D == 16) || (D == 17) || (D >= 18 && D <= 20) || (D >= 33 && D <= 35) || (D >= 36 && D <= 39) || (D >= 44 && D <= 45)
  },stopPropagation:function()
  {
    if (this.browserEvent)
    {
      if (this.type == "mousedown")
      {
        Ext.EventManager.stoppedMouseDownEvent.fire(this)
      }
      B.stopPropagation(this.browserEvent)
    }
  },getCharCode:function()
  {
    return this.charCode || this.keyCode
  },getKey:function()
  {
    var D = this.keyCode || this.charCode;
    return Ext.isSafari ? (A[D] || D) : D
  },getPageX:function()
  {
    return this.xy[0]
  },getPageY:function()
  {
    return this.xy[1]
  },getTime:function()
  {
    if (this.browserEvent)
    {
      return B.getTime(this.browserEvent)
    }
    return null
  },getXY:function()
  {
    return this.xy
  },getTarget:function(E, F, D)
  {
    return E ? Ext.fly(this.target).findParent(E, F, D) : this.target
  },getRelatedTarget:function()
  {
    if (this.browserEvent)
    {
      return B.getRelatedTarget(this.browserEvent)
    }
    return null
  },getWheelDelta:function()
  {
    var D = this.browserEvent;
    var E = 0;
    if (D.wheelDelta)
    {
      E = D.wheelDelta / 120
    } else
    {
      if (D.detail)
      {
        E = -D.detail / 3
      }
    }
    return E
  },hasModifier:function()
  {
    return !!((this.ctrlKey || this.altKey) || this.shiftKey)
  },within:function(E, F)
  {
    var D = this[F ? "getRelatedTarget" : "getTarget"]();
    return D && Ext.fly(E).contains(D)
  },getPoint:function()
  {
    return new Ext.lib.Point(this.xy[0], this.xy[1])
  }};
  return new Ext.EventObjectImpl()
}();
(function()
{
  var D = Ext.lib.Dom;
  var E = Ext.lib.Event;
  var A = Ext.lib.Anim;
  var propCache = {};
  var camelRe = /(-[a-z])/gi;
  var camelFn = function(m, a)
  {
    return a.charAt(1).toUpperCase()
  };
  var view = document.defaultView;
  Ext.Element = function(element, forceNew)
  {
    var dom = typeof element == "string" ? document.getElementById(element) : element;
    if (!dom)
    {
      return null
    }
    var id = dom.id;
    if (forceNew !== true && id && Ext.Element.cache[id])
    {
      return Ext.Element.cache[id]
    }
    this.dom = dom;
    this.id = id || Ext.id(dom)
  };
  var El = Ext.Element;
  El.prototype = {originalDisplay:"",visibilityMode:1,defaultUnit:"px",setVisibilityMode:function(visMode)
  {
    this.visibilityMode = visMode;
    return this
  },enableDisplayMode:function(display)
  {
    this.setVisibilityMode(El.DISPLAY);
    if (typeof display != "undefined")
    {
      this.originalDisplay = display
    }
    return this
  },findParent:function(simpleSelector, maxDepth, returnEl)
  {
    var p = this.dom,b = document.body,depth = 0,dq = Ext.DomQuery,stopEl;
    maxDepth = maxDepth || 50;
    if (typeof maxDepth != "number")
    {
      stopEl = Ext.getDom(maxDepth);
      maxDepth = 10
    }
    while (p && p.nodeType == 1 && depth < maxDepth && p != b && p != stopEl)
    {
      if (dq.is(p, simpleSelector))
      {
        return returnEl ? Ext.get(p) : p
      }
      depth++;
      p = p.parentNode
    }
    return null
  },findParentNode:function(simpleSelector, maxDepth, returnEl)
  {
    var p = Ext.fly(this.dom.parentNode, "_internal");
    return p ? p.findParent(simpleSelector, maxDepth, returnEl) : null
  },up:function(simpleSelector, maxDepth)
  {
    return this.findParentNode(simpleSelector, maxDepth, true)
  },is:function(simpleSelector)
  {
    return Ext.DomQuery.is(this.dom, simpleSelector)
  },animate:function(args, duration, onComplete, easing, animType)
  {
    this.anim(args, {duration:duration,callback:onComplete,easing:easing}, animType);
    return this
  },anim:function(args, opt, animType, defaultDur, defaultEase, cb)
  {
    animType = animType || "run";
    opt = opt || {};
    var anim = Ext.lib.Anim[animType](this.dom, args, (opt.duration || defaultDur) || 0.35, (opt.easing || defaultEase) || "easeOut", function()
    {
      Ext.callback(cb, this);
      Ext.callback(opt.callback, opt.scope || this, [this,opt])
    }, this);
    opt.anim = anim;
    return anim
  },preanim:function(a, i)
  {
    return !a[i] ? false : (typeof a[i] == "object" ? a[i] : {duration:a[i + 1],callback:a[i + 2],easing:a[i + 3]})
  },clean:function(forceReclean)
  {
    if (this.isCleaned && forceReclean !== true)
    {
      return this
    }
    var ns = /\S/;
    var d = this.dom,n = d.firstChild,ni = -1;
    while (n)
    {
      var nx = n.nextSibling;
      if (n.nodeType == 3 && !ns.test(n.nodeValue))
      {
        d.removeChild(n)
      } else
      {
        n.nodeIndex = ++ni
      }
      n = nx
    }
    this.isCleaned = true;
    return this
  },calcOffsetsTo:function(el)
  {
    el = Ext.get(el);
    var d = el.dom;
    var restorePos = false;
    if (el.getStyle("position") == "static")
    {
      el.position("relative");
      restorePos = true
    }
    var x = 0,y = 0;
    var op = this.dom;
    while (op && op != d && op.tagName != "HTML")
    {
      x += op.offsetLeft;
      y += op.offsetTop;
      op = op.offsetParent
    }
    if (restorePos)
    {
      el.position("static")
    }
    return[x,y]
  },scrollIntoView:function(container, hscroll)
  {
    var c = Ext.getDom(container) || document.body;
    var el = this.dom;
    var o = this.calcOffsetsTo(c),l = o[0],t = o[1],b = t + el.offsetHeight,r = l + el.offsetWidth;
    var ch = c.clientHeight;
    var ct = parseInt(c.scrollTop, 10);
    var cl = parseInt(c.scrollLeft, 10);
    var cb = ct + ch;
    var cr = cl + c.clientWidth;
    if (t < ct)
    {
      c.scrollTop = t
    } else
    {
      if (b > cb)
      {
        c.scrollTop = b - ch
      }
    }
    if (hscroll !== false)
    {
      if (l < cl)
      {
        c.scrollLeft = l
      } else
      {
        if (r > cr)
        {
          c.scrollLeft = r - c.clientWidth
        }
      }
    }
    return this
  },scrollChildIntoView:function(child, hscroll)
  {
    Ext.fly(child, "_scrollChildIntoView").scrollIntoView(this, hscroll)
  },autoHeight:function(animate, duration, onComplete, easing)
  {
    var oldHeight = this.getHeight();
    this.clip();
    this.setHeight(1);
    setTimeout(function()
    {
      var height = parseInt(this.dom.scrollHeight, 10);
      if (!animate)
      {
        this.setHeight(height);
        this.unclip();
        if (typeof onComplete == "function")
        {
          onComplete()
        }
      } else
      {
        this.setHeight(oldHeight);
        this.setHeight(height, animate, duration, function()
        {
          this.unclip();
          if (typeof onComplete == "function")
          {
            onComplete()
          }
        }.createDelegate(this), easing)
      }
    }.createDelegate(this), 0);
    return this
  },contains:function(el)
  {
    if (!el)
    {
      return false
    }
    return D.isAncestor(this.dom, el.dom ? el.dom : el)
  },isVisible:function(deep)
  {
    var vis = !(this.getStyle("visibility") == "hidden" || this.getStyle("display") == "none");
    if (deep !== true || !vis)
    {
      return vis
    }
    var p = this.dom.parentNode;
    while (p && p.tagName.toLowerCase() != "body")
    {
      if (!Ext.fly(p, "_isVisible").isVisible())
      {
        return false
      }
      p = p.parentNode
    }
    return true
  },select:function(selector, unique)
  {
    return El.select(selector, unique, this.dom)
  },query:function(selector, unique)
  {
    return Ext.DomQuery.select(selector, this.dom)
  },child:function(selector, returnDom)
  {
    var n = Ext.DomQuery.selectNode(selector, this.dom);
    return returnDom ? n : Ext.get(n)
  },down:function(selector, returnDom)
  {
    var n = Ext.DomQuery.selectNode(" > " + selector, this.dom);
    return returnDom ? n : Ext.get(n)
  },initDD:function(group, config, overrides)
  {
    var dd = new Ext.dd.DD(Ext.id(this.dom), group, config);
    return Ext.apply(dd, overrides)
  },initDDProxy:function(group, config, overrides)
  {
    var dd = new Ext.dd.DDProxy(Ext.id(this.dom), group, config);
    return Ext.apply(dd, overrides)
  },initDDTarget:function(group, config, overrides)
  {
    var dd = new Ext.dd.DDTarget(Ext.id(this.dom), group, config);
    return Ext.apply(dd, overrides)
  },setVisible:function(visible, animate)
  {
    if (!animate || !A)
    {
      if (this.visibilityMode == El.DISPLAY)
      {
        this.setDisplayed(visible)
      } else
      {
        this.fixDisplay();
        this.dom.style.visibility = visible ? "visible" : "hidden"
      }
    } else
    {
      var dom = this.dom;
      var visMode = this.visibilityMode;
      if (visible)
      {
        this.setOpacity(0.01);
        this.setVisible(true)
      }
      this.anim({opacity:{to:(visible ? 1 : 0)}}, this.preanim(arguments, 1), null, 0.35, "easeIn", function()
      {
        if (!visible)
        {
          if (visMode == El.DISPLAY)
          {
            dom.style.display = "none"
          } else
          {
            dom.style.visibility = "hidden"
          }
          Ext.get(dom).setOpacity(1)
        }
      })
    }
    return this
  },isDisplayed:function()
  {
    return this.getStyle("display") != "none"
  },toggle:function(animate)
  {
    this.setVisible(!this.isVisible(), this.preanim(arguments, 0));
    return this
  },setDisplayed:function(value)
  {
    if (typeof value == "boolean")
    {
      value = value ? this.originalDisplay : "none"
    }
    this.setStyle("display", value);
    return this
  },focus:function()
  {
    try
    {
      this.dom.focus()
    } catch(e)
    {
    }
    return this
  },blur:function()
  {
    try
    {
      this.dom.blur()
    } catch(e)
    {
    }
    return this
  },addClass:function(className)
  {
    if (className instanceof Array)
    {
      for (var i = 0,len = className.length; i < len; i++)
      {
        this.addClass(className[i])
      }
    } else
    {
      if (className && !this.hasClass(className))
      {
        this.dom.className = this.dom.className + " " + className
      }
    }
    return this
  },radioClass:function(className)
  {
    var siblings = this.dom.parentNode.childNodes;
    for (var i = 0; i < siblings.length; i++)
    {
      var s = siblings[i];
      if (s.nodeType == 1)
      {
        Ext.get(s).removeClass(className)
      }
    }
    this.addClass(className);
    return this
  },removeClass:function(className)
  {
    if (!className || !this.dom.className)
    {
      return this
    }
    if (className instanceof Array)
    {
      for (var i = 0,len = className.length; i < len; i++)
      {
        this.removeClass(className[i])
      }
    } else
    {
      if (this.hasClass(className))
      {
        var re = this.classReCache[className];
        if (!re)
        {
          re = new RegExp("(?:^|\\s+)" + className + "(?:\\s+|$)", "g");
          this.classReCache[className] = re
        }
        this.dom.className = this.dom.className.replace(re, " ")
      }
    }
    return this
  },classReCache:{},toggleClass:function(className)
  {
    if (this.hasClass(className))
    {
      this.removeClass(className)
    } else
    {
      this.addClass(className)
    }
    return this
  },hasClass:function(className)
  {
    return className && (" " + this.dom.className + " ").indexOf(" " + className + " ") != -1
  },replaceClass:function(oldClassName, newClassName)
  {
    this.removeClass(oldClassName);
    this.addClass(newClassName);
    return this
  },getStyles:function()
  {
    var a = arguments,len = a.length,r = {};
    for (var i = 0; i < len; i++)
    {
      r[a[i]] = this.getStyle(a[i])
    }
    return r
  },getStyle:function()
  {
    return view && view.getComputedStyle ? function(prop)
    {
      var el = this.dom,v,cs,camel;
      if (prop == "float")
      {
        prop = "cssFloat"
      }
      if (v = el.style[prop])
      {
        return v
      }
      if (cs = view.getComputedStyle(el, ""))
      {
        if (!(camel = propCache[prop]))
        {
          camel = propCache[prop] = prop.replace(camelRe, camelFn)
        }
        return cs[camel]
      }
      return null
    } : function(prop)
    {
      var el = this.dom,v,cs,camel;
      if (prop == "opacity")
      {
        if (typeof el.style.filter == "string")
        {
          var m = el.style.filter.match(/alpha\(opacity=(.*)\)/i);
          if (m)
          {
            var fv = parseFloat(m[1]);
            if (!isNaN(fv))
            {
              return fv ? fv / 100 : 0
            }
          }
        }
        return 1
      } else
      {
        if (prop == "float")
        {
          prop = "styleFloat"
        }
      }
      if (!(camel = propCache[prop]))
      {
        camel = propCache[prop] = prop.replace(camelRe, camelFn)
      }
      if (v = el.style[camel])
      {
        return v
      }
      if (cs = el.currentStyle)
      {
        return cs[camel]
      }
      return null
    }
  }(),setStyle:function(prop, value)
  {
    if (typeof prop == "string")
    {
      var camel;
      if (!(camel = propCache[prop]))
      {
        camel = propCache[prop] = prop.replace(camelRe, camelFn)
      }
      if (camel == "opacity")
      {
        this.setOpacity(value)
      } else
      {
        this.dom.style[camel] = value
      }
    } else
    {
      for (var style in prop)
      {
        if (typeof prop[style] != "function")
        {
          this.setStyle(style, prop[style])
        }
      }
    }
    return this
  },applyStyles:function(style)
  {
    Ext.DomHelper.applyStyles(this.dom, style);
    return this
  },getX:function()
  {
    return D.getX(this.dom)
  },getY:function()
  {
    return D.getY(this.dom)
  },getXY:function()
  {
    return D.getXY(this.dom)
  },setX:function(x, animate)
  {
    if (!animate || !A)
    {
      D.setX(this.dom, x)
    } else
    {
      this.setXY([x,this.getY()], this.preanim(arguments, 1))
    }
    return this
  },setY:function(y, animate)
  {
    if (!animate || !A)
    {
      D.setY(this.dom, y)
    } else
    {
      this.setXY([this.getX(),y], this.preanim(arguments, 1))
    }
    return this
  },setLeft:function(left)
  {
    this.setStyle("left", this.addUnits(left));
    return this
  },setTop:function(top)
  {
    this.setStyle("top", this.addUnits(top));
    return this
  },setRight:function(right)
  {
    this.setStyle("right", this.addUnits(right));
    return this
  },setBottom:function(bottom)
  {
    this.setStyle("bottom", this.addUnits(bottom));
    return this
  },setXY:function(pos, animate)
  {
    if (!animate || !A)
    {
      D.setXY(this.dom, pos)
    } else
    {
      this.anim({points:{to:pos}}, this.preanim(arguments, 1), "motion")
    }
    return this
  },setLocation:function(x, y, animate)
  {
    this.setXY([x,y], this.preanim(arguments, 2));
    return this
  },moveTo:function(x, y, animate)
  {
    this.setXY([x,y], this.preanim(arguments, 2));
    return this
  },getRegion:function()
  {
    return D.getRegion(this.dom)
  },getHeight:function(contentHeight)
  {
    var h = this.dom.offsetHeight || 0;
    return contentHeight !== true ? h : h - this.getBorderWidth("tb") - this.getPadding("tb")
  },getWidth:function(contentWidth)
  {
    var w = this.dom.offsetWidth || 0;
    return contentWidth !== true ? w : w - this.getBorderWidth("lr") - this.getPadding("lr")
  },getComputedHeight:function()
  {
    var h = Math.max(this.dom.offsetHeight, this.dom.clientHeight);
    if (!h)
    {
      h = parseInt(this.getStyle("height"), 10) || 0;
      if (!this.isBorderBox())
      {
        h += this.getFrameWidth("tb")
      }
    }
    return h
  },getComputedWidth:function()
  {
    var w = Math.max(this.dom.offsetWidth, this.dom.clientWidth);
    if (!w)
    {
      w = parseInt(this.getStyle("width"), 10) || 0;
      if (!this.isBorderBox())
      {
        w += this.getFrameWidth("lr")
      }
    }
    return w
  },getSize:function(contentSize)
  {
    return{width:this.getWidth(contentSize),height:this.getHeight(contentSize)}
  },getViewSize:function()
  {
    var d = this.dom,doc = document,aw = 0,ah = 0;
    if (d == doc || d == doc.body)
    {
      return{width:D.getViewWidth(),height:D.getViewHeight()}
    } else
    {
      return{width:d.clientWidth,height:d.clientHeight}
    }
  },getValue:function(asNumber)
  {
    return asNumber ? parseInt(this.dom.value, 10) : this.dom.value
  },adjustWidth:function(width)
  {
    if (typeof width == "number")
    {
      if (this.autoBoxAdjust && !this.isBorderBox())
      {
        width -= (this.getBorderWidth("lr") + this.getPadding("lr"))
      }
      if (width < 0)
      {
        width = 0
      }
    }
    return width
  },adjustHeight:function(height)
  {
    if (typeof height == "number")
    {
      if (this.autoBoxAdjust && !this.isBorderBox())
      {
        height -= (this.getBorderWidth("tb") + this.getPadding("tb"))
      }
      if (height < 0)
      {
        height = 0
      }
    }
    return height
  },setWidth:function(width, animate)
  {
    width = this.adjustWidth(width);
    if (!animate || !A)
    {
      this.dom.style.width = this.addUnits(width)
    } else
    {
      this.anim({width:{to:width}}, this.preanim(arguments, 1))
    }
    return this
  },setHeight:function(height, animate)
  {
    height = this.adjustHeight(height);
    if (!animate || !A)
    {
      this.dom.style.height = this.addUnits(height)
    } else
    {
      this.anim({height:{to:height}}, this.preanim(arguments, 1))
    }
    return this
  },setSize:function(width, height, animate)
  {
    if (typeof width == "object")
    {
      height = width.height;
      width = width.width
    }
    width = this.adjustWidth(width);
    height = this.adjustHeight(height);
    if (!animate || !A)
    {
      this.dom.style.width = this.addUnits(width);
      this.dom.style.height = this.addUnits(height)
    } else
    {
      this.anim({width:{to:width},height:{to:height}}, this.preanim(arguments, 2))
    }
    return this
  },setBounds:function(x, y, width, height, animate)
  {
    if (!animate || !A)
    {
      this.setSize(width, height);
      this.setLocation(x, y)
    } else
    {
      width = this.adjustWidth(width);
      height = this.adjustHeight(height);
      this.anim({points:{to:[x,y]},width:{to:width},height:{to:height}}, this.preanim(arguments, 4), "motion")
    }
    return this
  },setRegion:function(region, animate)
  {
    this.setBounds(region.left, region.top, region.right - region.left, region.bottom - region.top, this.preanim(arguments, 1));
    return this
  },addListener:function(eventName, fn, scope, options)
  {
    Ext.EventManager.on(this.dom, eventName, fn, scope || this, options)
  },removeListener:function(eventName, fn)
  {
    Ext.EventManager.removeListener(this.dom, eventName, fn);
    return this
  },removeAllListeners:function()
  {
    E.purgeElement(this.dom);
    return this
  },relayEvent:function(eventName, observable)
  {
    this.on(eventName, function(e)
    {
      observable.fireEvent(eventName, e)
    })
  },setOpacity:function(opacity, animate)
  {
    if (!animate || !A)
    {
      var s = this.dom.style;
      if (Ext.isIE)
      {
        s.zoom = 1;
        s.filter = (s.filter || "").replace(/alpha\([^\)]*\)/gi, "") + (opacity == 1 ? "" : "alpha(opacity=" + opacity * 100 + ")")
      } else
      {
        s.opacity = opacity
      }
    } else
    {
      this.anim({opacity:{to:opacity}}, this.preanim(arguments, 1), null, 0.35, "easeIn")
    }
    return this
  },getLeft:function(local)
  {
    if (!local)
    {
      return this.getX()
    } else
    {
      return parseInt(this.getStyle("left"), 10) || 0
    }
  },getRight:function(local)
  {
    if (!local)
    {
      return this.getX() + this.getWidth()
    } else
    {
      return(this.getLeft(true) + this.getWidth()) || 0
    }
  },getTop:function(local)
  {
    if (!local)
    {
      return this.getY()
    } else
    {
      return parseInt(this.getStyle("top"), 10) || 0
    }
  },getBottom:function(local)
  {
    if (!local)
    {
      return this.getY() + this.getHeight()
    } else
    {
      return(this.getTop(true) + this.getHeight()) || 0
    }
  },position:function(pos, zIndex, x, y)
  {
    if (!pos)
    {
      if (this.getStyle("position") == "static")
      {
        this.setStyle("position", "relative")
      }
    } else
    {
      this.setStyle("position", pos)
    }
    if (zIndex)
    {
      this.setStyle("z-index", zIndex)
    }
    if (x !== undefined && y !== undefined)
    {
      this.setXY([x,y])
    } else
    {
      if (x !== undefined)
      {
        this.setX(x)
      } else
      {
        if (y !== undefined)
        {
          this.setY(y)
        }
      }
    }
  },clearPositioning:function(value)
  {
    value = value || "";
    this.setStyle({"left":value,"right":value,"top":value,"bottom":value,"z-index":"","position":"static"});
    return this
  },getPositioning:function()
  {
    var l = this.getStyle("left");
    var t = this.getStyle("top");
    return{"position":this.getStyle("position"),"left":l,"right":l ? "" : this.getStyle("right"),"top":t,"bottom":t ? "" : this.getStyle("bottom"),"z-index":this.getStyle("z-index")}
  },getBorderWidth:function(side)
  {
    return this.addStyles(side, El.borders)
  },getPadding:function(side)
  {
    return this.addStyles(side, El.paddings)
  },setPositioning:function(pc)
  {
    this.applyStyles(pc);
    if (pc.right == "auto")
    {
      this.dom.style.right = ""
    }
    if (pc.bottom == "auto")
    {
      this.dom.style.bottom = ""
    }
    return this
  },fixDisplay:function()
  {
    if (this.getStyle("display") == "none")
    {
      this.setStyle("visibility", "hidden");
      this.setStyle("display", this.originalDisplay);
      if (this.getStyle("display") == "none")
      {
        this.setStyle("display", "block")
      }
    }
  },setLeftTop:function(left, top)
  {
    this.dom.style.left = this.addUnits(left);
    this.dom.style.top = this.addUnits(top);
    return this
  },move:function(direction, distance, animate)
  {
    var xy = this.getXY();
    direction = direction.toLowerCase();
    switch (direction)
        {case"l":case"left":this.moveTo(xy[0] - distance, xy[1], this.preanim(arguments, 2));break;case"r":case"right":this.moveTo(xy[0] + distance, xy[1], this.preanim(arguments, 2));break;case"t":case"top":case"up":this.moveTo(xy[0], xy[1] - distance, this.preanim(arguments, 2));break;case"b":case"bottom":case"down":this.moveTo(xy[0], xy[1] + distance, this.preanim(arguments, 2));break}
    return this
  },clip:function()
  {
    if (!this.isClipped)
    {
      this.isClipped = true;
      this.originalClip = {"o":this.getStyle("overflow"),"x":this.getStyle("overflow-x"),"y":this.getStyle("overflow-y")};
      this.setStyle("overflow", "hidden");
      this.setStyle("overflow-x", "hidden");
      this.setStyle("overflow-y", "hidden")
    }
    return this
  },unclip:function()
  {
    if (this.isClipped)
    {
      this.isClipped = false;
      var o = this.originalClip;
      if (o.o)
      {
        this.setStyle("overflow", o.o)
      }
      if (o.x)
      {
        this.setStyle("overflow-x", o.x)
      }
      if (o.y)
      {
        this.setStyle("overflow-y", o.y)
      }
    }
    return this
  },getAnchorXY:function(anchor, local, s)
  {
    var w,h,vp = false;
    if (!s)
    {
      var d = this.dom;
      if (d == document.body || d == document)
      {
        vp = true;
        w = D.getViewWidth();
        h = D.getViewHeight()
      } else
      {
        w = this.getWidth();
        h = this.getHeight()
      }
    } else
    {
      w = s.width;
      h = s.height
    }
    var x = 0,y = 0,r = Math.round;
    switch ((anchor || "tl").toLowerCase())
        {case"c":x = r(w * 0.5);y = r(h * 0.5);break;case"t":x = r(w * 0.5);y = 0;break;case"l":x = 0;y = r(h * 0.5);break;case"r":x = w;y = r(h * 0.5);break;case"b":x = r(w * 0.5);y = h;break;case"tl":x = 0;y = 0;break;case"bl":x = 0;y = h;break;case"br":x = w;y = h;break;case"tr":x = w;y = 0;break}
    if (local === true)
    {
      return[x,y]
    }
    if (vp)
    {
      var sc = this.getScroll();
      return[x + sc.left,y + sc.top]
    }
    var o = this.getXY();
    return[x + o[0],y + o[1]]
  },getAlignToXY:function(el, p, o)
  {
    el = Ext.get(el);
    var d = this.dom;
    if (!el.dom)
    {
      throw"Element.alignTo with an element that doesn't exist"
    }
    var c = false;
    var p1 = "",p2 = "";
    o = o || [0,0];
    if (!p)
    {
      p = "tl-bl"
    } else
    {
      if (p == "?")
      {
        p = "tl-bl?"
      } else
      {
        if (p.indexOf("-") == -1)
        {
          p = "tl-" + p
        }
      }
    }
    p = p.toLowerCase();
    var m = p.match(/^([a-z]+)-([a-z]+)(\?)?$/);
    if (!m)
    {
      throw"Element.alignTo with an invalid alignment " + p
    }
    p1 = m[1];
    p2 = m[2];
    c = !!m[3];
    var a1 = this.getAnchorXY(p1, true);
    var a2 = el.getAnchorXY(p2, false);
    var x = a2[0] - a1[0] + o[0];
    var y = a2[1] - a1[1] + o[1];
    if (c)
    {
      var w = this.getWidth(),h = this.getHeight(),r = el.getRegion();
      var dw = D.getViewWidth() - 5,dh = D.getViewHeight() - 5;
      var p1y = p1.charAt(0),p1x = p1.charAt(p1.length - 1);
      var p2y = p2.charAt(0),p2x = p2.charAt(p2.length - 1);
      var swapY = ((p1y == "t" && p2y == "b") || (p1y == "b" && p2y == "t"));
      var swapX = ((p1x == "r" && p2x == "l") || (p1x == "l" && p2x == "r"));
      var doc = document;
      var scrollX = (doc.documentElement.scrollLeft || doc.body.scrollLeft || 0) + 5;
      var scrollY = (doc.documentElement.scrollTop || doc.body.scrollTop || 0) + 5;
      if ((x + w) > dw + scrollX)
      {
        x = swapX ? r.left - w : dw + scrollX - w
      }
      if (x < scrollX)
      {
        x = swapX ? r.right : scrollX
      }
      if ((y + h) > dh + scrollY)
      {
        y = swapY ? r.top - h : dh + scrollY - h
      }
      if (y < scrollY)
      {
        y = swapY ? r.bottom : scrollY
      }
    }
    return[x,y]
  },getConstrainToXY:function()
  {
    var os = {top:0,left:0,bottom:0,right:0};
    return function(el, local, offsets, proposedXY)
    {
      el = Ext.get(el);
      offsets = offsets ? Ext.applyIf(offsets, os) : os;
      var vw,vh,vx = 0,vy = 0;
      if (el.dom == document.body || el.dom == document)
      {
        vw = Ext.lib.Dom.getViewWidth();
        vh = Ext.lib.Dom.getViewHeight()
      } else
      {
        vw = el.dom.clientWidth;
        vh = el.dom.clientHeight;
        if (!local)
        {
          var vxy = el.getXY();
          vx = vxy[0];
          vy = vxy[1]
        }
      }
      var s = el.getScroll();
      vx += offsets.left + s.left;
      vy += offsets.top + s.top;
      vw -= offsets.right;
      vh -= offsets.bottom;
      var vr = vx + vw;
      var vb = vy + vh;
      var xy = proposedXY || (!local ? this.getXY() : [this.getLeft(true),this.getTop(true)]);
      var x = xy[0],y = xy[1];
      var w = this.dom.offsetWidth,h = this.dom.offsetHeight;
      var moved = false;
      if ((x + w) > vr)
      {
        x = vr - w;
        moved = true
      }
      if ((y + h) > vb)
      {
        y = vb - h;
        moved = true
      }
      if (x < vx)
      {
        x = vx;
        moved = true
      }
      if (y < vy)
      {
        y = vy;
        moved = true
      }
      return moved ? [x,y] : false
    }
  }(),adjustForConstraints:function(xy, parent, offsets)
  {
    return this.getConstrainToXY(parent || document, false, offsets, xy) || xy
  },alignTo:function(element, position, offsets, animate)
  {
    var xy = this.getAlignToXY(element, position, offsets);
    this.setXY(xy, this.preanim(arguments, 3));
    return this
  },anchorTo:function(el, alignment, offsets, animate, monitorScroll, callback)
  {
    var action = function()
    {
      this.alignTo(el, alignment, offsets, animate);
      Ext.callback(callback, this)
    };
    Ext.EventManager.onWindowResize(action, this);
    var tm = typeof monitorScroll;
    if (tm != "undefined")
    {
      Ext.EventManager.on(window, "scroll", action, this, {buffer:tm == "number" ? monitorScroll : 50})
    }
    action.call(this);
    return this
  },clearOpacity:function()
  {
    if (window.ActiveXObject)
    {
      if (typeof this.dom.style.filter == "string" && (/alpha/i).test(this.dom.style.filter))
      {
        this.dom.style.filter = ""
      }
    } else
    {
      this.dom.style.opacity = "";
      this.dom.style["-moz-opacity"] = "";
      this.dom.style["-khtml-opacity"] = ""
    }
    return this
  },hide:function(animate)
  {
    this.setVisible(false, this.preanim(arguments, 0));
    return this
  },show:function(animate)
  {
    this.setVisible(true, this.preanim(arguments, 0));
    return this
  },addUnits:function(size)
  {
    return Ext.Element.addUnits(size, this.defaultUnit)
  },beginMeasure:function()
  {
    var el = this.dom;
    if (el.offsetWidth || el.offsetHeight)
    {
      return this
    }
    var changed = [];
    var p = this.dom,b = document.body;
    while ((!el.offsetWidth && !el.offsetHeight) && p && p.tagName && p != b)
    {
      var pe = Ext.get(p);
      if (pe.getStyle("display") == "none")
      {
        changed.push({el:p,visibility:pe.getStyle("visibility")});
        p.style.visibility = "hidden";
        p.style.display = "block"
      }
      p = p.parentNode
    }
    this._measureChanged = changed;
    return this
  },endMeasure:function()
  {
    var changed = this._measureChanged;
    if (changed)
    {
      for (var i = 0,len = changed.length; i < len; i++)
      {
        var r = changed[i];
        r.el.style.visibility = r.visibility;
        r.el.style.display = "none"
      }
      this._measureChanged = null
    }
    return this
  },update:function(html, loadScripts, callback)
  {
    if (typeof html == "undefined")
    {
      html = ""
    }
    if (loadScripts !== true)
    {
      this.dom.innerHTML = html;
      if (typeof callback == "function")
      {
        callback()
      }
      return this
    }
    var id = Ext.id();
    var dom = this.dom;
    html += "<span id=\"" + id + "\"></span>";
    E.onAvailable(id, function()
    {
      var hd = document.getElementsByTagName("head")[0];
      var re = /(?:<script([^>]*)?>)((\n|\r|.)*?)(?:<\/script>)/ig;
      var srcRe = /\ssrc=([\'\"])(.*?)\1/i;
      var typeRe = /\stype=([\'\"])(.*?)\1/i;
      var match;
      while (match = re.exec(html))
      {
        var attrs = match[1];
        var srcMatch = attrs ? attrs.match(srcRe) : false;
        if (srcMatch && srcMatch[2])
        {
          var s = document.createElement("script");
          s.src = srcMatch[2];
          var typeMatch = attrs.match(typeRe);
          if (typeMatch && typeMatch[2])
          {
            s.type = typeMatch[2]
          }
          hd.appendChild(s)
        } else
        {
          if (match[2] && match[2].length > 0)
          {
            if (window.execScript)
            {
              window.execScript(match[2])
            } else
            {
              window.eval(match[2])
            }
          }
        }
      }
      var el = document.getElementById(id);
      if (el)
      {
        el.parentNode.removeChild(el)
      }
      if (typeof callback == "function")
      {
        callback()
      }
    });
    dom.innerHTML = html.replace(/(?:<script.*?>)((\n|\r|.)*?)(?:<\/script>)/ig, "");
    return this
  },load:function()
  {
    var um = this.getUpdateManager();
    um.update.apply(um, arguments);
    return this
  },getUpdateManager:function()
  {
    if (!this.updateManager)
    {
      this.updateManager = new Ext.UpdateManager(this)
    }
    return this.updateManager
  },unselectable:function()
  {
    this.dom.unselectable = "on";
    this.swallowEvent("selectstart", true);
    this.applyStyles("-moz-user-select:none;-khtml-user-select:none;");
    this.addClass("x-unselectable");
    return this
  },getCenterXY:function()
  {
    return this.getAlignToXY(document, "c-c")
  },center:function(centerIn)
  {
    this.alignTo(centerIn || document, "c-c");
    return this
  },isBorderBox:function()
  {
    return noBoxAdjust[this.dom.tagName.toLowerCase()] || Ext.isBorderBox
  },getBox:function(contentBox, local)
  {
    var xy;
    if (!local)
    {
      xy = this.getXY()
    } else
    {
      var left = parseInt(this.getStyle("left"), 10) || 0;
      var top = parseInt(this.getStyle("top"), 10) || 0;
      xy = [left,top]
    }
    var el = this.dom,w = el.offsetWidth,h = el.offsetHeight,bx;
    if (!contentBox)
    {
      bx = {x:xy[0],y:xy[1],0:xy[0],1:xy[1],width:w,height:h}
    } else
    {
      var l = this.getBorderWidth("l") + this.getPadding("l");
      var r = this.getBorderWidth("r") + this.getPadding("r");
      var t = this.getBorderWidth("t") + this.getPadding("t");
      var b = this.getBorderWidth("b") + this.getPadding("b");
      bx = {x:xy[0] + l,y:xy[1] + t,0:xy[0] + l,1:xy[1] + t,width:w - (l + r),height:h - (t + b)}
    }
    bx.right = bx.x + bx.width;
    bx.bottom = bx.y + bx.height;
    return bx
  },getFrameWidth:function(sides, onlyContentBox)
  {
    return onlyContentBox && Ext.isBorderBox ? 0 : (this.getPadding(sides) + this.getBorderWidth(sides))
  },setBox:function(box, adjust, animate)
  {
    var w = box.width,h = box.height;
    if ((adjust && !this.autoBoxAdjust) && !this.isBorderBox())
    {
      w -= (this.getBorderWidth("lr") + this.getPadding("lr"));
      h -= (this.getBorderWidth("tb") + this.getPadding("tb"))
    }
    this.setBounds(box.x, box.y, w, h, this.preanim(arguments, 2));
    return this
  },repaint:function()
  {
    var dom = this.dom;
    this.addClass("x-repaint");
    setTimeout(function()
    {
      Ext.get(dom).removeClass("x-repaint")
    }, 1);
    return this
  },getMargins:function(side)
  {
    if (!side)
    {
      return{top:parseInt(this.getStyle("margin-top"), 10) || 0,left:parseInt(this.getStyle("margin-left"), 10) || 0,bottom:parseInt(this.getStyle("margin-bottom"), 10) || 0,right:parseInt(this.getStyle("margin-right"), 10) || 0}
    } else
    {
      return this.addStyles(side, El.margins)
    }
  },addStyles:function(sides, styles)
  {
    var val = 0,v,w;
    for (var i = 0,len = sides.length; i < len; i++)
    {
      v = this.getStyle(styles[sides.charAt(i)]);
      if (v)
      {
        w = parseInt(v, 10);
        if (w)
        {
          val += w
        }
      }
    }
    return val
  },createProxy:function(config, renderTo, matchBox)
  {
    if (renderTo)
    {
      renderTo = Ext.getDom(renderTo)
    } else
    {
      renderTo = document.body
    }
    config = typeof config == "object" ? config : {tag:"div",cls:config};
    var proxy = Ext.DomHelper.append(renderTo, config, true);
    if (matchBox)
    {
      proxy.setBox(this.getBox())
    }
    return proxy
  },mask:function(msg, msgCls)
  {
    if (this.getStyle("position") == "static")
    {
      this.setStyle("position", "relative")
    }
    if (!this._mask)
    {
      this._mask = Ext.DomHelper.append(this.dom, {cls:"ext-el-mask"}, true)
    }
    this.addClass("x-masked");
    this._mask.setDisplayed(true);
    if (typeof msg == "string")
    {
      if (!this._maskMsg)
      {
        this._maskMsg = Ext.DomHelper.append(this.dom, {cls:"ext-el-mask-msg",cn:{tag:"div"}}, true)
      }
      var mm = this._maskMsg;
      mm.dom.className = msgCls ? "ext-el-mask-msg " + msgCls : "ext-el-mask-msg";
      mm.dom.firstChild.innerHTML = msg;
      mm.setDisplayed(true);
      mm.center(this)
    }
    if (Ext.isIE && !(Ext.isIE7 && Ext.isStrict) && this.getStyle("height") == "auto")
    {
      this._mask.setHeight(this.getHeight())
    }
    return this._mask
  },unmask:function(removeEl)
  {
    if (this._mask)
    {
      if (removeEl === true)
      {
        this._mask.remove();
        delete this._mask;
        if (this._maskMsg)
        {
          this._maskMsg.remove();
          delete this._maskMsg
        }
      } else
      {
        this._mask.setDisplayed(false);
        if (this._maskMsg)
        {
          this._maskMsg.setDisplayed(false)
        }
      }
    }
    this.removeClass("x-masked")
  },isMasked:function()
  {
    return this._mask && this._mask.isVisible()
  },createShim:function()
  {
    var el = document.createElement("iframe");
    el.frameBorder = "no";
    el.className = "ext-shim";
    if (Ext.isIE && Ext.isSecure)
    {
      el.src = Ext.SSL_SECURE_URL
    }
    var shim = Ext.get(this.dom.parentNode.insertBefore(el, this.dom));
    shim.autoBoxAdjust = false;
    return shim
  },remove:function()
  {
    if (this.dom.parentNode)
    {
      this.dom.parentNode.removeChild(this.dom)
    }
    delete El.cache[this.dom.id]
  },addClassOnOver:function(className, preventFlicker)
  {
    this.on("mouseover", function()
    {
      Ext.fly(this, "_internal").addClass(className)
    }, this.dom);
    var removeFn = function(e)
    {
      if (preventFlicker !== true || !e.within(this, true))
      {
        Ext.fly(this, "_internal").removeClass(className)
      }
    };
    this.on("mouseout", removeFn, this.dom);
    return this
  },addClassOnFocus:function(className)
  {
    this.on("focus", function()
    {
      Ext.fly(this, "_internal").addClass(className)
    }, this.dom);
    this.on("blur", function()
    {
      Ext.fly(this, "_internal").removeClass(className)
    }, this.dom);
    return this
  },addClassOnClick:function(className)
  {
    var dom = this.dom;
    this.on("mousedown", function()
    {
      Ext.fly(dom, "_internal").addClass(className);
      var d = Ext.get(document);
      var fn = function()
      {
        Ext.fly(dom, "_internal").removeClass(className);
        d.removeListener("mouseup", fn)
      };
      d.on("mouseup", fn)
    });
    return this
  },swallowEvent:function(eventName, preventDefault)
  {
    var fn = function(e)
    {
      e.stopPropagation();
      if (preventDefault)
      {
        e.preventDefault()
      }
    };
    if (eventName instanceof Array)
    {
      for (var i = 0,len = eventName.length; i < len; i++)
      {
        this.on(eventName[i], fn)
      }
      return this
    }
    this.on(eventName, fn);
    return this
  },fitToParentDelegate:Ext.emptyFn,fitToParent:function(monitorResize, targetParent)
  {
    Ext.EventManager.removeResizeListener(this.fitToParentDelegate);
    this.fitToParentDelegate = Ext.emptyFn;
    if (monitorResize === true && !this.dom.parentNode)
    {
      return
    }
    var p = Ext.get(targetParent || this.dom.parentNode);
    this.setSize(p.getComputedWidth() - p.getFrameWidth("lr"), p.getComputedHeight() - p.getFrameWidth("tb"));
    if (monitorResize === true)
    {
      this.fitToParentDelegate = this.fitToParent.createDelegate(this, [true,targetParent]);
      Ext.EventManager.onWindowResize(this.fitToParentDelegate)
    }
    return this
  },getNextSibling:function()
  {
    var n = this.dom.nextSibling;
    while (n && n.nodeType != 1)
    {
      n = n.nextSibling
    }
    return n
  },getPrevSibling:function()
  {
    var n = this.dom.previousSibling;
    while (n && n.nodeType != 1)
    {
      n = n.previousSibling
    }
    return n
  },appendChild:function(el)
  {
    el = Ext.get(el);
    el.appendTo(this);
    return this
  },createChild:function(config, insertBefore, returnDom)
  {
    config = config || {tag:"div"};
    if (insertBefore)
    {
      return Ext.DomHelper.insertBefore(insertBefore, config, returnDom !== true)
    }
    return Ext.DomHelper[!this.dom.firstChild ? "overwrite" : "append"](this.dom, config, returnDom !== true)
  },appendTo:function(el)
  {
    el = Ext.getDom(el);
    el.appendChild(this.dom);
    return this
  },insertBefore:function(el)
  {
    el = Ext.getDom(el);
    el.parentNode.insertBefore(this.dom, el);
    return this
  },insertAfter:function(el)
  {
    el = Ext.getDom(el);
    el.parentNode.insertBefore(this.dom, el.nextSibling);
    return this
  },insertFirst:function(el, returnDom)
  {
    el = el || {};
    if (typeof el == "object" && !el.nodeType)
    {
      return this.createChild(el, this.dom.firstChild, returnDom)
    } else
    {
      el = Ext.getDom(el);
      this.dom.insertBefore(el, this.dom.firstChild);
      return !returnDom ? Ext.get(el) : el
    }
  },insertSibling:function(el, where, returnDom)
  {
    where = where ? where.toLowerCase() : "before";
    el = el || {};
    var rt,refNode = where == "before" ? this.dom : this.dom.nextSibling;
    if (typeof el == "object" && !el.nodeType)
    {
      if (where == "after" && !this.dom.nextSibling)
      {
        rt = Ext.DomHelper.append(this.dom.parentNode, el, !returnDom)
      } else
      {
        rt = Ext.DomHelper[where == "after" ? "insertAfter" : "insertBefore"](this.dom, el, !returnDom)
      }
    } else
    {
      rt = this.dom.parentNode.insertBefore(Ext.getDom(el), where == "before" ? this.dom : this.dom.nextSibling);
      if (!returnDom)
      {
        rt = Ext.get(rt)
      }
    }
    return rt
  },wrap:function(config, returnDom)
  {
    if (!config)
    {
      config = {tag:"div"}
    }
    var newEl = Ext.DomHelper.insertBefore(this.dom, config, !returnDom);
    newEl.dom ? newEl.dom.appendChild(this.dom) : newEl.appendChild(this.dom);
    return newEl
  },replace:function(el)
  {
    el = Ext.get(el);
    this.insertBefore(el);
    el.remove();
    return this
  },insertHtml:function(where, html, returnEl)
  {
    var el = Ext.DomHelper.insertHtml(where, this.dom, html);
    return returnEl ? Ext.get(el) : el
  },set:function(o, useSet)
  {
    var el = this.dom;
    useSet = typeof useSet == "undefined" ? (el.setAttribute ? true : false) : useSet;
    for (var attr in o)
    {
      if (attr == "style" || typeof o[attr] == "function")
      {
        continue
      }
      if (attr == "cls")
      {
        el.className = o["cls"]
      } else
      {
        if (useSet)
        {
          el.setAttribute(attr, o[attr])
        } else
        {
          el[attr] = o[attr]
        }
      }
    }
    if (o.style)
    {
      Ext.DomHelper.applyStyles(el, o.style)
    }
    return this
  },addKeyListener:function(key, fn, scope)
  {
    var config;
    if (typeof key != "object" || key instanceof Array)
    {
      config = {key:key,fn:fn,scope:scope}
    } else
    {
      config = {key:key.key,shift:key.shift,ctrl:key.ctrl,alt:key.alt,fn:fn,scope:scope}
    }
    return new Ext.KeyMap(this, config)
  },addKeyMap:function(config)
  {
    return new Ext.KeyMap(this, config)
  },isScrollable:function()
  {
    var dom = this.dom;
    return dom.scrollHeight > dom.clientHeight || dom.scrollWidth > dom.clientWidth
  },scrollTo:function(side, value, animate)
  {
    var prop = side.toLowerCase() == "left" ? "scrollLeft" : "scrollTop";
    if (!animate || !A)
    {
      this.dom[prop] = value
    } else
    {
      var to = prop == "scrollLeft" ? [value,this.dom.scrollTop] : [this.dom.scrollLeft,value];
      this.anim({scroll:{"to":to}}, this.preanim(arguments, 2), "scroll")
    }
    return this
  },scroll:function(direction, distance, animate)
  {
    if (!this.isScrollable())
    {
      return
    }
    var el = this.dom;
    var l = el.scrollLeft,t = el.scrollTop;
    var w = el.scrollWidth,h = el.scrollHeight;
    var cw = el.clientWidth,ch = el.clientHeight;
    direction = direction.toLowerCase();
    var scrolled = false;
    var a = this.preanim(arguments, 2);
    switch (direction)
        {case"l":case"left":if (w - l > cw)
    {
      var v = Math.min(l + distance, w - cw);
      this.scrollTo("left", v, a);
      scrolled = true
    }break;case"r":case"right":if (l > 0)
    {
      var v = Math.max(l - distance, 0);
      this.scrollTo("left", v, a);
      scrolled = true
    }break;case"t":case"top":case"up":if (t > 0)
    {
      var v = Math.max(t - distance, 0);
      this.scrollTo("top", v, a);
      scrolled = true
    }break;case"b":case"bottom":case"down":if (h - t > ch)
    {
      var v = Math.min(t + distance, h - ch);
      this.scrollTo("top", v, a);
      scrolled = true
    }break}
    return scrolled
  },translatePoints:function(x, y)
  {
    if (typeof x == "object" || x instanceof Array)
    {
      y = x[1];
      x = x[0]
    }
    var p = this.getStyle("position");
    var o = this.getXY();
    var l = parseInt(this.getStyle("left"), 10);
    var t = parseInt(this.getStyle("top"), 10);
    if (isNaN(l))
    {
      l = (p == "relative") ? 0 : this.dom.offsetLeft
    }
    if (isNaN(t))
    {
      t = (p == "relative") ? 0 : this.dom.offsetTop
    }
    return{left:(x - o[0] + l),top:(y - o[1] + t)}
  },getScroll:function()
  {
    var d = this.dom,doc = document;
    if (d == doc || d == doc.body)
    {
      var l = window.pageXOffset || doc.documentElement.scrollLeft || doc.body.scrollLeft || 0;
      var t = window.pageYOffset || doc.documentElement.scrollTop || doc.body.scrollTop || 0;
      return{left:l,top:t}
    } else
    {
      return{left:d.scrollLeft,top:d.scrollTop}
    }
  },getColor:function(attr, defaultValue, prefix)
  {
    var v = this.getStyle(attr);
    if (!v || v == "transparent" || v == "inherit")
    {
      return defaultValue
    }
    var color = typeof prefix == "undefined" ? "#" : prefix;
    if (v.substr(0, 4) == "rgb(")
    {
      var rvs = v.slice(4, v.length - 1).split(",");
      for (var i = 0; i < 3; i++)
      {
        var h = parseInt(rvs[i]).toString(16);
        if (h < 16)
        {
          h = "0" + h
        }
        color += h
      }
    } else
    {
      if (v.substr(0, 1) == "#")
      {
        if (v.length == 4)
        {
          for (var i = 1; i < 4; i++)
          {
            var c = v.charAt(i);
            color += c + c
          }
        } else
        {
          if (v.length == 7)
          {
            color += v.substr(1)
          }
        }
      }
    }
    return(color.length > 5 ? color.toLowerCase() : defaultValue)
  },boxWrap:function(cls)
  {
    cls = cls || "x-box";
    var el = Ext.get(this.insertHtml("beforeBegin", String.format("<div class=\"{0}\">" + El.boxMarkup + "</div>", cls)));
    el.child("." + cls + "-mc").dom.appendChild(this.dom);
    return el
  },getAttributeNS:Ext.isIE ? function(ns, name)
  {
    var d = this.dom;
    var type = typeof d[ns + ":" + name];
    if (type != "undefined" && type != "unknown")
    {
      return d[ns + ":" + name]
    }
    return d[name]
  } : function(ns, name)
  {
    var d = this.dom;
    return d.getAttributeNS(ns, name) || d.getAttribute(ns + ":" + name) || d.getAttribute(name) || d[name]
  }};
  var ep = El.prototype;
  ep.on = ep.addListener;
  ep.mon = ep.addListener;
  ep.un = ep.removeListener;
  ep.autoBoxAdjust = true;
  El.unitPattern = /\d+(px|em|%|en|ex|pt|in|cm|mm|pc)$/i;
  El.addUnits = function(v, defaultUnit)
  {
    if (v === "" || v == "auto")
    {
      return v
    }
    if (v === undefined)
    {
      return""
    }
    if (typeof v == "number" || !El.unitPattern.test(v))
    {
      return v + (defaultUnit || "px")
    }
    return v
  };
  El.boxMarkup = "<div class=\"{0}-tl\"><div class=\"{0}-tr\"><div class=\"{0}-tc\"></div></div></div><div class=\"{0}-ml\"><div class=\"{0}-mr\"><div class=\"{0}-mc\"></div></div></div><div class=\"{0}-bl\"><div class=\"{0}-br\"><div class=\"{0}-bc\"></div></div></div>";
  El.VISIBILITY = 1;
  El.DISPLAY = 2;
  El.borders = {l:"border-left-width",r:"border-right-width",t:"border-top-width",b:"border-bottom-width"};
  El.paddings = {l:"padding-left",r:"padding-right",t:"padding-top",b:"padding-bottom"};
  El.margins = {l:"margin-left",r:"margin-right",t:"margin-top",b:"margin-bottom"};
  El.cache = {};
  var docEl;
  El.get = function(el)
  {
    var ex,elm,id;
    if (!el)
    {
      return null
    }
    if (typeof el == "string")
    {
      if (!(elm = document.getElementById(el)))
      {
        return null
      }
      if (ex = El.cache[el])
      {
        ex.dom = elm
      } else
      {
        ex = El.cache[el] = new El(elm)
      }
      return ex
    } else
    {
      if (el.tagName)
      {
        if (!(id = el.id))
        {
          id = Ext.id(el)
        }
        if (ex = El.cache[id])
        {
          ex.dom = el
        } else
        {
          ex = El.cache[id] = new El(el)
        }
        return ex
      } else
      {
        if (el instanceof El)
        {
          if (el != docEl)
          {
            el.dom = document.getElementById(el.id) || el.dom;
            El.cache[el.id] = el
          }
          return el
        } else
        {
          if (el.isComposite)
          {
            return el
          } else
          {
            if (el instanceof Array)
            {
              return El.select(el)
            } else
            {
              if (el == document)
              {
                if (!docEl)
                {
                  var f = function()
                  {
                  };
                  f.prototype = El.prototype;
                  docEl = new f();
                  docEl.dom = document
                }
                return docEl
              }
            }
          }
        }
      }
    }
    return null
  };
  El.uncache = function(el)
  {
    for (var i = 0,a = arguments,len = a.length; i < len; i++)
    {
      if (a[i])
      {
        delete El.cache[a[i].id || a[i]]
      }
    }
  };
  El.garbageCollect = function()
  {
    if (!Ext.enableGarbageCollector)
    {
      clearInterval(El.collectorThread);
      return
    }
    for (var eid in El.cache)
    {
      var el = El.cache[eid],d = el.dom;
      if (!d || !d.parentNode || (!d.offsetParent && !document.getElementById(eid)))
      {
        delete El.cache[eid];
        if (d && Ext.enableListenerCollection)
        {
          E.purgeElement(d)
        }
      }
    }
  };
  El.collectorThreadId = setInterval(El.garbageCollect, 30000);
  El.Flyweight = function(dom)
  {
    this.dom = dom
  };
  El.Flyweight.prototype = El.prototype;
  El._flyweights = {};
  El.fly = function(el, named)
  {
    named = named || "_global";
    el = Ext.getDom(el);
    if (!el)
    {
      return null
    }
    if (!El._flyweights[named])
    {
      El._flyweights[named] = new El.Flyweight()
    }
    El._flyweights[named].dom = el;
    return El._flyweights[named]
  };
  Ext.get = El.get;
  Ext.fly = El.fly;
  var noBoxAdjust = Ext.isStrict ? {select:1} : {input:1,select:1,textarea:1};
  if (Ext.isIE || Ext.isGecko)
  {
    noBoxAdjust["button"] = 1
  }
  Ext.EventManager.on(window, "unload", function()
  {
    delete El.cache;
    delete El._flyweights
  })
})();
Ext.enableFx = true;
Ext.Fx = {slideIn:function(A, C)
{
  var B = this.getFxEl();
  C = C || {};
  B.queueFx(C, function()
  {
    A = A || "t";
    this.fixDisplay();
    var D = this.getFxRestore();
    var I = this.getBox();
    this.setSize(I);
    var F = this.fxWrap(D.pos, C, "hidden");
    var K = this.dom.style;
    K.visibility = "visible";
    K.position = "absolute";
    var E = function()
    {
      B.fxUnwrap(F, D.pos, C);
      K.width = D.width;
      K.height = D.height;
      B.afterFx(C)
    };
    var J,L = {to:[I.x,I.y]},H = {to:I.width},G = {to:I.height};
    switch (A.toLowerCase())
        {case"t":F.setSize(I.width, 0);K.left = K.bottom = "0";J = {height:G};break;case"l":F.setSize(0, I.height);K.right = K.top = "0";J = {width:H};break;case"r":F.setSize(0, I.height);F.setX(I.right);K.left = K.top = "0";J = {width:H,points:L};break;case"b":F.setSize(I.width, 0);F.setY(I.bottom);K.left = K.top = "0";J = {height:G,points:L};break;case"tl":F.setSize(0, 0);K.right = K.bottom = "0";J = {width:H,height:G};break;case"bl":F.setSize(0, 0);F.setY(I.y + I.height);K.right = K.top = "0";J = {width:H,height:G,points:L};break;case"br":F.setSize(0, 0);F.setXY([I.right,I.bottom]);K.left = K.top = "0";J = {width:H,height:G,points:L};break;case"tr":F.setSize(0, 0);F.setX(I.x + I.width);K.left = K.bottom = "0";J = {width:H,height:G,points:L};break}
    this.dom.style.visibility = "visible";
    F.show();
    arguments.callee.anim = F.fxanim(J, C, "motion", 0.5, "easeOut", E)
  });
  return this
},slideOut:function(A, C)
{
  var B = this.getFxEl();
  C = C || {};
  B.queueFx(C, function()
  {
    A = A || "t";
    var I = this.getFxRestore();
    var D = this.getBox();
    this.setSize(D);
    var G = this.fxWrap(I.pos, C, "visible");
    var F = this.dom.style;
    F.visibility = "visible";
    F.position = "absolute";
    G.setSize(D);
    var J = function()
    {
      if (C.useDisplay)
      {
        B.setDisplayed(false)
      } else
      {
        B.hide()
      }
      B.fxUnwrap(G, I.pos, C);
      F.width = I.width;
      F.height = I.height;
      B.afterFx(C)
    };
    var E,H = {to:0};
    switch (A.toLowerCase())
        {case"t":F.left = F.bottom = "0";E = {height:H};break;case"l":F.right = F.top = "0";E = {width:H};break;case"r":F.left = F.top = "0";E = {width:H,points:{to:[D.right,D.y]}};break;case"b":F.left = F.top = "0";E = {height:H,points:{to:[D.x,D.bottom]}};break;case"tl":F.right = F.bottom = "0";E = {width:H,height:H};break;case"bl":F.right = F.top = "0";E = {width:H,height:H,points:{to:[D.x,D.bottom]}};break;case"br":F.left = F.top = "0";E = {width:H,height:H,points:{to:[D.x + D.width,D.bottom]}};break;case"tr":F.left = F.bottom = "0";E = {width:H,height:H,points:{to:[D.right,D.y]}};break}
    arguments.callee.anim = G.fxanim(E, C, "motion", 0.5, "easeOut", J)
  });
  return this
},puff:function(B)
{
  var A = this.getFxEl();
  B = B || {};
  A.queueFx(B, function()
  {
    this.clearOpacity();
    this.show();
    var F = this.getFxRestore();
    var D = this.dom.style;
    var G = function()
    {
      if (B.useDisplay)
      {
        A.setDisplayed(false)
      } else
      {
        A.hide()
      }
      A.clearOpacity();
      A.setPositioning(F.pos);
      D.width = F.width;
      D.height = F.height;
      D.fontSize = "";
      A.afterFx(B)
    };
    var E = this.getWidth();
    var C = this.getHeight();
    arguments.callee.anim = this.fxanim({width:{to:this.adjustWidth(E * 2)},height:{to:this.adjustHeight(C * 2)},points:{by:[-(E * 0.5),-(C * 0.5)]},opacity:{to:0},fontSize:{to:200,unit:"%"}}, B, "motion", 0.5, "easeOut", G)
  });
  return this
},switchOff:function(B)
{
  var A = this.getFxEl();
  B = B || {};
  A.queueFx(B, function()
  {
    this.clearOpacity();
    this.clip();
    var D = this.getFxRestore();
    var C = this.dom.style;
    var E = function()
    {
      if (B.useDisplay)
      {
        A.setDisplayed(false)
      } else
      {
        A.hide()
      }
      A.clearOpacity();
      A.setPositioning(D.pos);
      C.width = D.width;
      C.height = D.height;
      A.afterFx(B)
    };
    this.fxanim({opacity:{to:0.3}}, null, null, 0.1, null, function()
    {
      this.clearOpacity();
      (function()
      {
        this.fxanim({height:{to:1},points:{by:[0,this.getHeight() * 0.5]}}, B, "motion", 0.3, "easeIn", E)
      }).defer(100, this)
    })
  });
  return this
},highlight:function(A, C)
{
  var B = this.getFxEl();
  C = C || {};
  B.queueFx(C, function()
  {
    A = A || "ffff9c";
    attr = C.attr || "backgroundColor";
    this.clearOpacity();
    this.show();
    var E = this.getColor(attr);
    var F = this.dom.style[attr];
    endColor = (C.endColor || E) || "ffffff";
    var G = function()
    {
      B.dom.style[attr] = F;
      B.afterFx(C)
    };
    var D = {};
    D[attr] = {from:A,to:endColor};
    arguments.callee.anim = this.fxanim(D, C, "color", 1, "easeIn", G)
  });
  return this
},frame:function(A, C, D)
{
  var B = this.getFxEl();
  D = D || {};
  B.queueFx(D, function()
  {
    A = A || "#C3DAF9";
    if (A.length == 6)
    {
      A = "#" + A
    }
    C = C || 1;
    duration = D.duration || 1;
    this.show();
    var E = this.getBox();
    var F = function()
    {
      var G = this.createProxy({style:{visbility:"hidden",position:"absolute","z-index":"35000",border:"0px solid " + A}});
      var H = Ext.isBorderBox ? 2 : 1;
      G.animate({top:{from:E.y,to:E.y - 20},left:{from:E.x,to:E.x - 20},borderWidth:{from:0,to:10},opacity:{from:1,to:0},height:{from:E.height,to:(E.height + (20 * H))},width:{from:E.width,to:(E.width + (20 * H))}}, duration, function()
      {
        G.remove()
      });
      if (--C > 0)
      {
        F.defer((duration / 2) * 1000, this)
      } else
      {
        B.afterFx(D)
      }
    };
    F.call(this)
  });
  return this
},pause:function(C)
{
  var A = this.getFxEl();
  var B = {};
  A.queueFx(B, function()
  {
    setTimeout(function()
    {
      A.afterFx(B)
    }, C * 1000)
  });
  return this
},fadeIn:function(B)
{
  var A = this.getFxEl();
  B = B || {};
  A.queueFx(B, function()
  {
    this.setOpacity(0);
    this.fixDisplay();
    this.dom.style.visibility = "visible";
    var C = B.endOpacity || 1;
    arguments.callee.anim = this.fxanim({opacity:{to:C}}, B, null, 0.5, "easeOut", function()
    {
      if (C == 1)
      {
        this.clearOpacity()
      }
      A.afterFx(B)
    })
  });
  return this
},fadeOut:function(B)
{
  var A = this.getFxEl();
  B = B || {};
  A.queueFx(B, function()
  {
    arguments.callee.anim = this.fxanim({opacity:{to:B.endOpacity || 0}}, B, null, 0.5, "easeOut", function()
    {
      if (this.visibilityMode == Ext.Element.DISPLAY || B.useDisplay)
      {
        this.dom.style.display = "none"
      } else
      {
        this.dom.style.visibility = "hidden"
      }
      this.clearOpacity();
      A.afterFx(B)
    })
  });
  return this
},scale:function(A, B, C)
{
  this.shift(Ext.apply({}, C, {width:A,height:B}));
  return this
},shift:function(B)
{
  var A = this.getFxEl();
  B = B || {};
  A.queueFx(B, function()
  {
    var E = {},D = B.width,F = B.height,C = B.x,H = B.y,G = B.opacity;
    if (D !== undefined)
    {
      E.width = {to:this.adjustWidth(D)}
    }
    if (F !== undefined)
    {
      E.height = {to:this.adjustHeight(F)}
    }
    if (C !== undefined || H !== undefined)
    {
      E.points = {to:[C !== undefined ? C : this.getX(),H !== undefined ? H : this.getY()]}
    }
    if (G !== undefined)
    {
      E.opacity = {to:G}
    }
    if (B.xy !== undefined)
    {
      E.points = {to:B.xy}
    }
    arguments.callee.anim = this.fxanim(E, B, "motion", 0.35, "easeOut", function()
    {
      A.afterFx(B)
    })
  });
  return this
},ghost:function(A, C)
{
  var B = this.getFxEl();
  C = C || {};
  B.queueFx(C, function()
  {
    A = A || "b";
    var H = this.getFxRestore();
    var E = this.getWidth(),G = this.getHeight();
    var F = this.dom.style;
    var J = function()
    {
      if (C.useDisplay)
      {
        B.setDisplayed(false)
      } else
      {
        B.hide()
      }
      B.clearOpacity();
      B.setPositioning(H.pos);
      F.width = H.width;
      F.height = H.height;
      B.afterFx(C)
    };
    var D = {opacity:{to:0},points:{}},I = D.points;
    switch (A.toLowerCase())
        {case"t":I.by = [0,-G];break;case"l":I.by = [-E,0];break;case"r":I.by = [E,0];break;case"b":I.by = [0,G];break;case"tl":I.by = [-E,-G];break;case"bl":I.by = [-E,G];break;case"br":I.by = [E,G];break;case"tr":I.by = [E,-G];break}
    arguments.callee.anim = this.fxanim(D, C, "motion", 0.5, "easeOut", J)
  });
  return this
},syncFx:function()
{
  this.fxDefaults = Ext.apply(this.fxDefaults || {}, {block:false,concurrent:true,stopFx:false});
  return this
},sequenceFx:function()
{
  this.fxDefaults = Ext.apply(this.fxDefaults || {}, {block:false,concurrent:false,stopFx:false});
  return this
},nextFx:function()
{
  var A = this.fxQueue[0];
  if (A)
  {
    A.call(this)
  }
},hasActiveFx:function()
{
  return this.fxQueue && this.fxQueue[0]
},stopFx:function()
{
  if (this.hasActiveFx())
  {
    var A = this.fxQueue[0];
    if (A && A.anim && A.anim.isAnimated())
    {
      this.fxQueue = [A];
      A.anim.stop(true)
    }
  }
  return this
},beforeFx:function(A)
{
  if (this.hasActiveFx() && !A.concurrent)
  {
    if (A.stopFx)
    {
      this.stopFx();
      return true
    }
    return false
  }
  return true
},hasFxBlock:function()
{
  var A = this.fxQueue;
  return A && A[0] && A[0].block
},queueFx:function(C, A)
{
  if (!this.fxQueue)
  {
    this.fxQueue = []
  }
  if (!this.hasFxBlock())
  {
    Ext.applyIf(C, this.fxDefaults);
    if (!C.concurrent)
    {
      var B = this.beforeFx(C);
      A.block = C.block;
      this.fxQueue.push(A);
      if (B)
      {
        this.nextFx()
      }
    } else
    {
      A.call(this)
    }
  }
  return this
},fxWrap:function(F, D, C)
{
  var B;
  if (!D.wrap || !(B = Ext.get(D.wrap)))
  {
    var A;
    if (D.fixPosition)
    {
      A = this.getXY()
    }
    var E = document.createElement("div");
    E.style.visibility = C;
    B = Ext.get(this.dom.parentNode.insertBefore(E, this.dom));
    B.setPositioning(F);
    if (B.getStyle("position") == "static")
    {
      B.position("relative")
    }
    this.clearPositioning("auto");
    B.clip();
    B.dom.appendChild(this.dom);
    if (A)
    {
      B.setXY(A)
    }
  }
  return B
},fxUnwrap:function(A, C, B)
{
  this.clearPositioning();
  this.setPositioning(C);
  if (!B.wrap)
  {
    A.dom.parentNode.insertBefore(this.dom, A.dom);
    A.remove()
  }
},getFxRestore:function()
{
  var A = this.dom.style;
  return{pos:this.getPositioning(),width:A.width,height:A.height}
},afterFx:function(A)
{
  if (A.afterStyle)
  {
    this.applyStyles(A.afterStyle)
  }
  if (A.afterCls)
  {
    this.addClass(A.afterCls)
  }
  if (A.remove === true)
  {
    this.remove()
  }
  Ext.callback(A.callback, A.scope, [this]);
  if (!A.concurrent)
  {
    this.fxQueue.shift();
    this.nextFx()
  }
},getFxEl:function()
{
  return Ext.get(this.dom)
},fxanim:function(D, E, B, F, C, A)
{
  B = B || "run";
  E = E || {};
  var G = Ext.lib.Anim[B](this.dom, D, (E.duration || F) || 0.35, (E.easing || C) || "easeOut", function()
  {
    Ext.callback(A, this)
  }, this);
  E.anim = G;
  return G
}};
Ext.Fx.resize = Ext.Fx.scale;
Ext.apply(Ext.Element.prototype, Ext.Fx);
Ext.CompositeElement = function(A)
{
  this.elements = [];
  this.addElements(A)
};
Ext.CompositeElement.prototype = {isComposite:true,addElements:function(E)
{
  if (!E)
  {
    return this
  }
  if (typeof E == "string")
  {
    E = Ext.Element.selectorFunction(E)
  }
  var D = this.elements;
  var B = D.length - 1;
  for (var C = 0,A = E.length; C < A; C++)
  {
    D[++B] = Ext.get(E[C])
  }
  return this
},fill:function(A)
{
  this.elements = [];
  this.add(A);
  return this
},filter:function(A)
{
  var B = [];
  this.each(function(C)
  {
    if (C.is(A))
    {
      B[B.length] = C.dom
    }
  });
  this.fill(B);
  return this
},invoke:function(E, B)
{
  var D = this.elements;
  for (var C = 0,A = D.length; C < A; C++)
  {
    Ext.Element.prototype[E].apply(D[C], B)
  }
  return this
},add:function(A)
{
  if (typeof A == "string")
  {
    this.addElements(Ext.Element.selectorFunction(A))
  } else
  {
    if (A.length !== undefined)
    {
      this.addElements(A)
    } else
    {
      this.addElements([A])
    }
  }
  return this
},each:function(E, D)
{
  var C = this.elements;
  for (var B = 0,A = C.length; B < A; B++)
  {
    if (E.call(D || C[B], C[B], this, B) === false)
    {
      break
    }
  }
  return this
},item:function(A)
{
  return this.elements[A] || null
},first:function()
{
  return this.item(0)
},last:function()
{
  return this.item(this.elements.length - 1)
},getCount:function()
{
  return this.elements.length
},contains:function(A)
{
  return this.indexOf(A) !== -1
},indexOf:function(A)
{
  return this.elements.indexOf(Ext.get(A))
},removeElement:function(D, F)
{
  if (D instanceof Array)
  {
    for (var C = 0,A = D.length; C < A; C++)
    {
      this.removeElement(D[C])
    }
    return this
  }
  var B = typeof D == "number" ? D : this.indexOf(D);
  if (B !== -1)
  {
    if (F)
    {
      var E = this.elements[B];
      if (E.dom)
      {
        E.remove()
      } else
      {
        E.parentNode.removeChild(E)
      }
    }
    this.elements.splice(B, 1)
  }
  return this
},replaceElement:function(D, C, A)
{
  var B = typeof D == "number" ? D : this.indexOf(D);
  if (B !== -1)
  {
    if (A)
    {
      this.elements[B].replaceWith(C)
    } else
    {
      this.elements.splice(B, 1, Ext.get(C))
    }
  }
  return this
},clear:function()
{
  this.elements = []
}};
(function()
{
  Ext.CompositeElement.createCall = function(B, C)
  {
    if (!B[C])
    {
      B[C] = function()
      {
        return this.invoke(C, arguments)
      }
    }
  };
  for (var A in Ext.Element.prototype)
  {
    if (typeof Ext.Element.prototype[A] == "function")
    {
      Ext.CompositeElement.createCall(Ext.CompositeElement.prototype, A)
    }
  }
})();
Ext.CompositeElementLite = function(A)
{
  Ext.CompositeElementLite.superclass.constructor.call(this, A);
  this.el = new Ext.Element.Flyweight()
};
Ext.extend(Ext.CompositeElementLite, Ext.CompositeElement, {addElements:function(E)
{
  if (E)
  {
    if (E instanceof Array)
    {
      this.elements = this.elements.concat(E)
    } else
    {
      var D = this.elements;
      var B = D.length - 1;
      for (var C = 0,A = E.length; C < A; C++)
      {
        D[++B] = E[C]
      }
    }
  }
  return this
},invoke:function(F, B)
{
  var D = this.elements;
  var E = this.el;
  for (var C = 0,A = D.length; C < A; C++)
  {
    E.dom = D[C];
    Ext.Element.prototype[F].apply(E, B)
  }
  return this
},item:function(A)
{
  if (!this.elements[A])
  {
    return null
  }
  this.el.dom = this.elements[A];
  return this.el
},addListener:function(B, G, F, E)
{
  var D = this.elements;
  for (var C = 0,A = D.length; C < A; C++)
  {
    Ext.EventManager.on(D[C], B, G, F || D[C], E)
  }
  return this
},each:function(F, E)
{
  var C = this.elements;
  var D = this.el;
  for (var B = 0,A = C.length; B < A; B++)
  {
    D.dom = C[B];
    if (F.call(E || D, D, this, B) === false)
    {
      break
    }
  }
  return this
},indexOf:function(A)
{
  return this.elements.indexOf(Ext.getDom(A))
},replaceElement:function(D, C, A)
{
  var B = typeof D == "number" ? D : this.indexOf(D);
  if (B !== -1)
  {
    C = Ext.getDom(C);
    if (A)
    {
      var E = this.elements[B];
      E.parentNode.insertBefore(C, E);
      E.parentNode.removeChild(E)
    }
    this.elements.splice(B, 1, C)
  }
  return this
}});
Ext.CompositeElementLite.prototype.on = Ext.CompositeElementLite.prototype.addListener;
if (Ext.DomQuery)
{
  Ext.Element.selectorFunction = Ext.DomQuery.select
}
Ext.Element.select = function(A, D, B)
{
  var C;
  if (typeof A == "string")
  {
    C = Ext.Element.selectorFunction(A, B)
  } else
  {
    if (A.length !== undefined)
    {
      C = A
    } else
    {
      throw"Invalid selector"
    }
  }
  if (D === true)
  {
    return new Ext.CompositeElement(C)
  } else
  {
    return new Ext.CompositeElementLite(C)
  }
};
Ext.select = Ext.Element.select;
Ext.data.Connection = function(A)
{
  Ext.apply(this, A);
  this.addEvents({"beforerequest":true,"requestcomplete":true,"requestexception":true});
  Ext.data.Connection.superclass.constructor.call(this)
};
Ext.extend(Ext.data.Connection, Ext.util.Observable, {timeout:30000,autoAbort:false,disableCaching:true,request:function(E)
{
  if (this.fireEvent("beforerequest", this, E) !== false)
  {
    var C = E.params;
    if (typeof C == "function")
    {
      C = C.call(E.scope || window, E)
    }
    if (typeof C == "object")
    {
      C = Ext.urlEncode(E.params)
    }
    if (this.extraParams)
    {
      var G = Ext.urlEncode(this.extraParams);
      C = C ? (C + "&" + G) : G
    }
    var B = E.url || this.url;
    if (typeof B == "function")
    {
      B = B.call(E.scope || window, E)
    }
    if (E.form)
    {
      var D = Ext.getDom(E.form);
      B = B || D.action;
      var I = D.getAttribute("enctype");
      if (E.isUpload || (I && I.toLowerCase() == "multipart/form-data"))
      {
        return this.doFormUpload(E, C, B)
      }
      var H = Ext.lib.Ajax.serializeForm(D);
      C = C ? (C + "&" + H) : H
    }
    var J = E.headers;
    if (this.defaultHeaders)
    {
      J = Ext.apply(J || {}, this.defaultHeaders);
      if (!E.headers)
      {
        E.headers = J
      }
    }
    var F = {success:this.handleResponse,failure:this.handleFailure,scope:this,argument:{options:E},timeout:this.timeout};
    var A = E.method || this.method || (C ? "POST" : "GET");
    if (A == "GET" && (this.disableCaching && E.disableCaching !== false) || E.disableCaching === true)
    {
      B += (B.indexOf("?") != -1 ? "&" : "?") + "_dc=" + (new Date().getTime())
    }
    if (typeof E.autoAbort == "boolean")
    {
      if (E.autoAbort)
      {
        this.abort()
      }
    } else
    {
      if (this.autoAbort !== false)
      {
        this.abort()
      }
    }
    if ((A == "GET" && C) || E.xmlData)
    {
      B += (B.indexOf("?") != -1 ? "&" : "?") + C;
      C = ""
    }
    this.transId = Ext.lib.Ajax.request(A, B, F, C, E);
    return this.transId
  } else
  {
    Ext.callback(E.callback, E.scope, [E,null,null]);
    return null
  }
},isLoading:function(A)
{
  if (A)
  {
    return Ext.lib.Ajax.isCallInProgress(A)
  } else
  {
    return this.transId ? true : false
  }
},abort:function(A)
{
  if (A || this.isLoading())
  {
    Ext.lib.Ajax.abort(A || this.transId)
  }
},handleResponse:function(A)
{
  this.transId = false;
  var B = A.argument.options;
  A.argument = B ? B.argument : null;
  this.fireEvent("requestcomplete", this, A, B);
  Ext.callback(B.success, B.scope, [A,B]);
  Ext.callback(B.callback, B.scope, [B,true,A])
},handleFailure:function(A, C)
{
  this.transId = false;
  var B = A.argument.options;
  A.argument = B ? B.argument : null;
  this.fireEvent("requestexception", this, A, B, C);
  Ext.callback(B.failure, B.scope, [A,B]);
  Ext.callback(B.callback, B.scope, [B,false,A])
},doFormUpload:function(E, A, B)
{
  var C = Ext.id();
  var F = document.createElement("iframe");
  F.id = C;
  F.name = C;
  F.className = "x-hidden";
  if (Ext.isIE)
  {
    F.src = Ext.SSL_SECURE_URL
  }
  document.body.appendChild(F);
  if (Ext.isIE)
  {
    document.frames[C].name = C
  }
  var D = Ext.getDom(E.form);
  D.target = C;
  D.method = "POST";
  D.enctype = D.encoding = "multipart/form-data";
  if (B)
  {
    D.action = B
  }
  var L,J;
  if (A)
  {
    L = [];
    A = Ext.urlDecode(A, false);
    for (var H in A)
    {
      if (A.hasOwnProperty(H))
      {
        J = document.createElement("input");
        J.type = "hidden";
        J.name = H;
        J.value = A[H];
        D.appendChild(J);
        L.push(J)
      }
    }
  }
  function G()
  {
    var M = {responseText:"",responseXML:null};
    M.argument = E ? E.argument : null;
    try
    {
      var O;
      if (Ext.isIE)
      {
        O = F.contentWindow.document
      } else
      {
        O = (F.contentDocument || window.frames[C].document)
      }
      if (O && O.body)
      {
        M.responseText = O.body.innerHTML
      }
      if (O && O.XMLDocument)
      {
        M.responseXML = O.XMLDocument
      } else
      {
        M.responseXML = O
      }
    } catch(N)
    {
    }
    Ext.EventManager.removeListener(F, "load", G, this);
    this.fireEvent("requestcomplete", this, M, E);
    Ext.callback(E.success, E.scope, [M,E]);
    Ext.callback(E.callback, E.scope, [E,true,M]);
    setTimeout(function()
    {
      document.body.removeChild(F)
    }, 100)
  }
  Ext.EventManager.on(F, "load", G, this);
  D.submit();
  if (L)
  {
    for (var I = 0,K = L.length; I < K; I++)
    {
      D.removeChild(L[I])
    }
  }
}});
Ext.Ajax = new Ext.data.Connection({autoAbort:false,serializeForm:function(A)
{
  return Ext.lib.Ajax.serializeForm(A)
}});
Ext.UpdateManager = function(B, A)
{
  B = Ext.get(B);
  if (!A && B.updateManager)
  {
    return B.updateManager
  }
  this.el = B;
  this.defaultUrl = null;
  this.addEvents({"beforeupdate":true,"update":true,"failure":true});
  var C = Ext.UpdateManager.defaults;
  this.sslBlankUrl = C.sslBlankUrl;
  this.disableCaching = C.disableCaching;
  this.indicatorText = C.indicatorText;
  this.showLoadIndicator = C.showLoadIndicator;
  this.timeout = C.timeout;
  this.loadScripts = C.loadScripts;
  this.transaction = null;
  this.autoRefreshProcId = null;
  this.refreshDelegate = this.refresh.createDelegate(this);
  this.updateDelegate = this.update.createDelegate(this);
  this.formUpdateDelegate = this.formUpdate.createDelegate(this);
  this.successDelegate = this.processSuccess.createDelegate(this);
  this.failureDelegate = this.processFailure.createDelegate(this);
  if (!this.renderer)
  {
    this.renderer = new Ext.UpdateManager.BasicRenderer()
  }
  Ext.UpdateManager.superclass.constructor.call(this)
};
Ext.extend(Ext.UpdateManager, Ext.util.Observable, {getEl:function()
{
  return this.el
},update:function(B, E, G, C)
{
  if (this.fireEvent("beforeupdate", this.el, B, E) !== false)
  {
    var F = this.method,A;
    if (typeof B == "object")
    {
      A = B;
      B = A.url;
      E = E || A.params;
      G = G || A.callback;
      C = C || A.discardUrl;
      if (G && A.scope)
      {
        G = G.createDelegate(A.scope)
      }
      if (typeof A.method != "undefined")
      {
        F = A.method
      }
      if (typeof A.nocache != "undefined")
      {
        this.disableCaching = A.nocache
      }
      if (typeof A.text != "undefined")
      {
        this.indicatorText = "<div class=\"loading-indicator\">" + A.text + "</div>"
      }
      if (typeof A.scripts != "undefined")
      {
        this.loadScripts = A.scripts
      }
      if (typeof A.timeout != "undefined")
      {
        this.timeout = A.timeout
      }
    }
    this.showLoading();
    if (!C)
    {
      this.defaultUrl = B
    }
    if (typeof B == "function")
    {
      B = B.call(this)
    }
    F = F || (E ? "POST" : "GET");
    if (F == "GET")
    {
      B = this.prepareUrl(B)
    }
    var D = Ext.apply(A || {}, {url:B,params:E,success:this.successDelegate,failure:this.failureDelegate,callback:undefined,timeout:(this.timeout * 1000),argument:{"url":B,"form":null,"callback":G,"params":E}});
    this.transaction = Ext.Ajax.request(D)
  }
},formUpdate:function(C, A, B, D)
{
  if (this.fireEvent("beforeupdate", this.el, C, A) !== false)
  {
    if (typeof A == "function")
    {
      A = A.call(this)
    }
    C = Ext.getDom(C);
    this.transaction = Ext.Ajax.request({form:C,url:A,success:this.successDelegate,failure:this.failureDelegate,timeout:(this.timeout * 1000),argument:{"url":A,"form":C,"callback":D,"reset":B}});
    this.showLoading.defer(1, this)
  }
},refresh:function(A)
{
  if (this.defaultUrl == null)
  {
    return
  }
  this.update(this.defaultUrl, null, A, true)
},startAutoRefresh:function(B, C, D, E, A)
{
  if (A)
  {
    this.update(C || this.defaultUrl, D, E, true)
  }
  if (this.autoRefreshProcId)
  {
    clearInterval(this.autoRefreshProcId)
  }
  this.autoRefreshProcId = setInterval(this.update.createDelegate(this, [C || this.defaultUrl,D,E,true]), B * 1000)
},stopAutoRefresh:function()
{
  if (this.autoRefreshProcId)
  {
    clearInterval(this.autoRefreshProcId);
    delete this.autoRefreshProcId
  }
},isAutoRefreshing:function()
{
  return this.autoRefreshProcId ? true : false
},showLoading:function()
{
  if (this.showLoadIndicator)
  {
    this.el.update(this.indicatorText)
  }
},prepareUrl:function(B)
{
  if (this.disableCaching)
  {
    var A = "_dc=" + (new Date().getTime());
    if (B.indexOf("?") !== -1)
    {
      B += "&" + A
    } else
    {
      B += "?" + A
    }
  }
  return B
},processSuccess:function(A)
{
  this.transaction = null;
  if (A.argument.form && A.argument.reset)
  {
    try
    {
      A.argument.form.reset()
    } catch(B)
    {
    }
  }
  if (this.loadScripts)
  {
    this.renderer.render(this.el, A, this, this.updateComplete.createDelegate(this, [A]))
  } else
  {
    this.renderer.render(this.el, A, this);
    this.updateComplete(A)
  }
},updateComplete:function(A)
{
  this.fireEvent("update", this.el, A);
  if (typeof A.argument.callback == "function")
  {
    A.argument.callback(this.el, true, A)
  }
},processFailure:function(A)
{
  this.transaction = null;
  this.fireEvent("failure", this.el, A);
  if (typeof A.argument.callback == "function")
  {
    A.argument.callback(this.el, false, A)
  }
},setRenderer:function(A)
{
  this.renderer = A
},getRenderer:function()
{
  return this.renderer
},setDefaultUrl:function(A)
{
  this.defaultUrl = A
},abort:function()
{
  if (this.transaction)
  {
    Ext.Ajax.abort(this.transaction)
  }
},isUpdating:function()
{
  if (this.transaction)
  {
    return Ext.Ajax.isLoading(this.transaction)
  }
  return false
}});
Ext.UpdateManager.defaults = {timeout:30,loadScripts:false,sslBlankUrl:(Ext.SSL_SECURE_URL || "javascript:false"),disableCaching:false,showLoadIndicator:true,indicatorText:"<div class=\"loading-indicator\">Loading...</div>"};
Ext.UpdateManager.updateElement = function(D, C, E, B)
{
  var A = Ext.get(D, true).getUpdateManager();
  Ext.apply(A, B);
  A.update(C, E, B ? B.callback : null)
};
Ext.UpdateManager.update = Ext.UpdateManager.updateElement;
Ext.UpdateManager.BasicRenderer = function()
{
};
Ext.UpdateManager.BasicRenderer.prototype = {render:function(C, A, B, D)
{
  C.update(A.responseText, B.loadScripts, D)
}};
Date.parseFunctions = {count:0};
Date.parseRegexes = [];
Date.formatFunctions = {count:0};
Date.prototype.dateFormat = function(B)
{
  if (Date.formatFunctions[B] == null)
  {
    Date.createNewFormat(B)
  }
  var A = Date.formatFunctions[B];
  return this[A]()
};
Date.prototype.format = Date.prototype.dateFormat;
Date.createNewFormat = function(format)
{
  var funcName = "format" + Date.formatFunctions.count++;
  Date.formatFunctions[format] = funcName;
  var code = "Date.prototype." + funcName + " = function(){return ";
  var special = false;
  var ch = "";
  for (var i = 0; i < format.length; ++i)
  {
    ch = format.charAt(i);
    if (!special && ch == "\\")
    {
      special = true
    } else
    {
      if (special)
      {
        special = false;
        code += "'" + String.escape(ch) + "' + "
      } else
      {
        code += Date.getFormatCode(ch)
      }
    }
  }
  eval(code.substring(0, code.length - 3) + ";}")
};
Date.getFormatCode = function(A)
{
  switch (A)
      {case"d":return"String.leftPad(this.getDate(), 2, '0') + ";case"D":return"Date.dayNames[this.getDay()].substring(0, 3) + ";case"j":return"this.getDate() + ";case"l":return"Date.dayNames[this.getDay()] + ";case"S":return"this.getSuffix() + ";case"w":return"this.getDay() + ";case"z":return"this.getDayOfYear() + ";case"W":return"this.getWeekOfYear() + ";case"F":return"Date.monthNames[this.getMonth()] + ";case"m":return"String.leftPad(this.getMonth() + 1, 2, '0') + ";case"M":return"Date.monthNames[this.getMonth()].substring(0, 3) + ";case"n":return"(this.getMonth() + 1) + ";case"t":return"this.getDaysInMonth() + ";case"L":return"(this.isLeapYear() ? 1 : 0) + ";case"Y":return"this.getFullYear() + ";case"y":return"('' + this.getFullYear()).substring(2, 4) + ";case"a":return"(this.getHours() < 12 ? 'am' : 'pm') + ";case"A":return"(this.getHours() < 12 ? 'AM' : 'PM') + ";case"g":return"((this.getHours() % 12) ? this.getHours() % 12 : 12) + ";case"G":return"this.getHours() + ";case"h":return"String.leftPad((this.getHours() % 12) ? this.getHours() % 12 : 12, 2, '0') + ";case"H":return"String.leftPad(this.getHours(), 2, '0') + ";case"i":return"String.leftPad(this.getMinutes(), 2, '0') + ";case"s":return"String.leftPad(this.getSeconds(), 2, '0') + ";case"O":return"this.getGMTOffset() + ";case"T":return"this.getTimezone() + ";case"Z":return"(this.getTimezoneOffset() * -60) + ";default:return"'" + String.escape(A) + "' + "}
};
Date.parseDate = function(A, C)
{
  if (Date.parseFunctions[C] == null)
  {
    Date.createParser(C)
  }
  var B = Date.parseFunctions[C];
  return Date[B](A)
};
Date.createParser = function(format)
{
  var funcName = "parse" + Date.parseFunctions.count++;
  var regexNum = Date.parseRegexes.length;
  var currentGroup = 1;
  Date.parseFunctions[format] = funcName;
  var code = "Date." + funcName + " = function(input){\n" + "var y = -1, m = -1, d = -1, h = -1, i = -1, s = -1, o, z, v;\n" + "var d = new Date();\n" + "y = d.getFullYear();\n" + "m = d.getMonth();\n" + "d = d.getDate();\n" + "var results = input.match(Date.parseRegexes[" + regexNum + "]);\n" + "if (results && results.length > 0) {";
  var regex = "";
  var special = false;
  var ch = "";
  for (var i = 0; i < format.length; ++i)
  {
    ch = format.charAt(i);
    if (!special && ch == "\\")
    {
      special = true
    } else
    {
      if (special)
      {
        special = false;
        regex += String.escape(ch)
      } else
      {
        var obj = Date.formatCodeToRegex(ch, currentGroup);
        currentGroup += obj.g;
        regex += obj.s;
        if (obj.g && obj.c)
        {
          code += obj.c
        }
      }
    }
  }
  code += "if (y >= 0 && m >= 0 && d > 0 && h >= 0 && i >= 0 && s >= 0)\n" + "{v = new Date(y, m, d, h, i, s);}\n" + "else if (y >= 0 && m >= 0 && d > 0 && h >= 0 && i >= 0)\n" + "{v = new Date(y, m, d, h, i);}\n" + "else if (y >= 0 && m >= 0 && d > 0 && h >= 0)\n" + "{v = new Date(y, m, d, h);}\n" + "else if (y >= 0 && m >= 0 && d > 0)\n" + "{v = new Date(y, m, d);}\n" + "else if (y >= 0 && m >= 0)\n" + "{v = new Date(y, m);}\n" + "else if (y >= 0)\n" + "{v = new Date(y);}\n" + "}return (v && (z || o))?\n" + "    ((z)? v.add(Date.SECOND, (v.getTimezoneOffset() * 60) + (z*1)) :\n" + "        v.add(Date.HOUR, (v.getGMTOffset() / 100) + (o / -100))) : v\n" + ";}";
  Date.parseRegexes[regexNum] = new RegExp("^" + regex + "$");
  eval(code)
};
Date.formatCodeToRegex = function(B, A)
{
  switch (B)
      {case"D":return{g:0,c:null,s:"(?:Sun|Mon|Tue|Wed|Thu|Fri|Sat)"};case"j":return{g:1,c:"d = parseInt(results[" + A + "], 10);\n",s:"(\\d{1,2})"};case"d":return{g:1,c:"d = parseInt(results[" + A + "], 10);\n",s:"(\\d{2})"};case"l":return{g:0,c:null,s:"(?:" + Date.dayNames.join("|") + ")"};case"S":return{g:0,c:null,s:"(?:st|nd|rd|th)"};case"w":return{g:0,c:null,s:"\\d"};case"z":return{g:0,c:null,s:"(?:\\d{1,3})"};case"W":return{g:0,c:null,s:"(?:\\d{2})"};case"F":return{g:1,c:"m = parseInt(Date.monthNumbers[results[" + A + "].substring(0, 3)], 10);\n",s:"(" + Date.monthNames.join("|") + ")"};case"M":return{g:1,c:"m = parseInt(Date.monthNumbers[results[" + A + "]], 10);\n",s:"(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)"};case"n":return{g:1,c:"m = parseInt(results[" + A + "], 10) - 1;\n",s:"(\\d{1,2})"};case"m":return{g:1,c:"m = parseInt(results[" + A + "], 10) - 1;\n",s:"(\\d{2})"};case"t":return{g:0,c:null,s:"\\d{1,2}"};case"L":return{g:0,c:null,s:"(?:1|0)"};case"Y":return{g:1,c:"y = parseInt(results[" + A + "], 10);\n",s:"(\\d{4})"};case"y":return{g:1,c:"var ty = parseInt(results[" + A + "], 10);\n" + "y = ty > Date.y2kYear ? 1900 + ty : 2000 + ty;\n",s:"(\\d{1,2})"};case"a":return{g:1,c:"if (results[" + A + "] == 'am') {\n" + "if (h == 12) { h = 0; }\n" + "} else { if (h < 12) { h += 12; }}",s:"(am|pm)"};case"A":return{g:1,c:"if (results[" + A + "] == 'AM') {\n" + "if (h == 12) { h = 0; }\n" + "} else { if (h < 12) { h += 12; }}",s:"(AM|PM)"};case"g":case"G":return{g:1,c:"h = parseInt(results[" + A + "], 10);\n",s:"(\\d{1,2})"};case"h":case"H":return{g:1,c:"h = parseInt(results[" + A + "], 10);\n",s:"(\\d{2})"};case"i":return{g:1,c:"i = parseInt(results[" + A + "], 10);\n",s:"(\\d{2})"};case"s":return{g:1,c:"s = parseInt(results[" + A + "], 10);\n",s:"(\\d{2})"};case"O":return{g:1,c:["o = results[",A,"];\n","var sn = o.substring(0,1);\n","var hr = o.substring(1,3)*1 + Math.floor(o.substring(3,5) / 60);\n","var mn = o.substring(3,5) % 60;\n","o = ((-12 <= (hr*60 + mn)/60) && ((hr*60 + mn)/60 <= 14))?\n","    (sn + String.leftPad(hr, 2, 0) + String.leftPad(mn, 2, 0)) : null;\n"].join(""),s:"([+-]\\d{4})"};case"T":return{g:0,c:null,s:"[A-Z]{1,4}"};case"Z":return{g:1,c:"z = results[" + A + "];\n" + "z = (-43200 <= z*1 && z*1 <= 50400)? z : null;\n",s:"([+-]?\\d{1,5})"};default:return{g:0,c:null,s:String.escape(B)}}
};
Date.prototype.getTimezone = function()
{
  return this.toString().replace(/^.*? ([A-Z]{1,4})[\-+][0-9]{4} .*$/, "$1")
};
Date.prototype.getGMTOffset = function()
{
  return(this.getTimezoneOffset() > 0 ? "-" : "+") + String.leftPad(Math.abs(Math.floor(this.getTimezoneOffset() / 60)), 2, "0") + String.leftPad(this.getTimezoneOffset() % 60, 2, "0")
};
Date.prototype.getDayOfYear = function()
{
  var A = 0;
  Date.daysInMonth[1] = this.isLeapYear() ? 29 : 28;
  for (var B = 0; B < this.getMonth(); ++B)
  {
    A += Date.daysInMonth[B]
  }
  return A + this.getDate() - 1
};
Date.prototype.getWeekOfYear = function()
{
  var B = this.getDayOfYear() + (4 - this.getDay());
  var A = new Date(this.getFullYear(), 0, 1);
  var C = (7 - A.getDay() + 4);
  return String.leftPad(((B - C) / 7) + 1, 2, "0")
};
Date.prototype.isLeapYear = function()
{
  var A = this.getFullYear();
  return((A & 3) == 0 && (A % 100 || (A % 400 == 0 && A)))
};
Date.prototype.getFirstDayOfMonth = function()
{
  var A = (this.getDay() - (this.getDate() - 1)) % 7;
  return(A < 0) ? (A + 7) : A
};
Date.prototype.getLastDayOfMonth = function()
{
  var A = (this.getDay() + (Date.daysInMonth[this.getMonth()] - this.getDate())) % 7;
  return(A < 0) ? (A + 7) : A
};
Date.prototype.getFirstDateOfMonth = function()
{
  return new Date(this.getFullYear(), this.getMonth(), 1)
};
Date.prototype.getLastDateOfMonth = function()
{
  return new Date(this.getFullYear(), this.getMonth(), this.getDaysInMonth())
};
Date.prototype.getDaysInMonth = function()
{
  Date.daysInMonth[1] = this.isLeapYear() ? 29 : 28;
  return Date.daysInMonth[this.getMonth()]
};
Date.prototype.getSuffix = function()
{
  switch (this.getDate())
      {case 1:case 21:case 31:return"st";case 2:case 22:return"nd";case 3:case 23:return"rd";default:return"th"}
};
Date.daysInMonth = [31,28,31,30,31,30,31,31,30,31,30,31];
Date.monthNames = ["January","February","March","April","May","June","July","August","September","October","November","December"];
Date.dayNames = ["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];
Date.y2kYear = 50;
Date.monthNumbers = {Jan:0,Feb:1,Mar:2,Apr:3,May:4,Jun:5,Jul:6,Aug:7,Sep:8,Oct:9,Nov:10,Dec:11};
Date.prototype.clone = function()
{
  return new Date(this.getTime())
};
Date.prototype.clearTime = function(A)
{
  if (A)
  {
    return this.clone().clearTime()
  }
  this.setHours(0);
  this.setMinutes(0);
  this.setSeconds(0);
  this.setMilliseconds(0);
  return this
};
if (Ext.isSafari)
{
  Date.brokenSetMonth = Date.prototype.setMonth;
  Date.prototype.setMonth = function(A)
  {
    if (A <= -1)
    {
      var D = Math.ceil(-A);
      var C = Math.ceil(D / 12);
      var B = (D % 12) ? 12 - D % 12 : 0;
      this.setFullYear(this.getFullYear() - C);
      return Date.brokenSetMonth.call(this, B)
    } else
    {
      return Date.brokenSetMonth.apply(this, arguments)
    }
  }
}
Date.MILLI = "ms";
Date.SECOND = "s";
Date.MINUTE = "mi";
Date.HOUR = "h";
Date.DAY = "d";
Date.MONTH = "mo";
Date.YEAR = "y";
Date.prototype.add = function(B, C)
{
  var D = this.clone();
  if (!B || C === 0)
  {
    return D
  }
  switch (B.toLowerCase())
      {case Date.MILLI:D.setMilliseconds(this.getMilliseconds() + C);break;case Date.SECOND:D.setSeconds(this.getSeconds() + C);break;case Date.MINUTE:D.setMinutes(this.getMinutes() + C);break;case Date.HOUR:D.setHours(this.getHours() + C);break;case Date.DAY:D.setDate(this.getDate() + C);break;case Date.MONTH:var A = this.getDate();if (A > 28)
  {
    A = Math.min(A, this.getFirstDateOfMonth().add("mo", C).getLastDateOfMonth().getDate())
  }D.setDate(A);D.setMonth(this.getMonth() + C);break;case Date.YEAR:D.setFullYear(this.getFullYear() + C);break}
  return D
};
Ext.util.DelayedTask = function(E, D, A)
{
  var G = null,F,B;
  var C = function()
  {
    var H = new Date().getTime();
    if (H - B >= F)
    {
      clearInterval(G);
      G = null;
      E.apply(D, A || [])
    }
  };
  this.delay = function(I, K, J, H)
  {
    if (G && I != F)
    {
      this.cancel()
    }
    F = I;
    B = new Date().getTime();
    E = K || E;
    D = J || D;
    A = H || A;
    if (!G)
    {
      G = setInterval(C, F)
    }
  };
  this.cancel = function()
  {
    if (G)
    {
      clearInterval(G);
      G = null
    }
  }
};
Ext.util.TaskRunner = function(E)
{
  E = E || 10;
  var F = [],A = [];
  var B = 0;
  var G = false;
  var D = function()
  {
    G = false;
    clearInterval(B);
    B = 0
  };
  var H = function()
  {
    if (!G)
    {
      G = true;
      B = setInterval(I, E)
    }
  };
  var C = function(J)
  {
    A.push(J);
    if (J.onStop)
    {
      J.onStop()
    }
  };
  var I = function()
  {
    if (A.length > 0)
    {
      for (var O = 0,K = A.length; O < K; O++)
      {
        F.remove(A[O])
      }
      A = [];
      if (F.length < 1)
      {
        D();
        return
      }
    }
    var M = new Date().getTime();
    for (var O = 0,K = F.length; O < K; ++O)
    {
      var N = F[O];
      var J = M - N.taskRunTime;
      if (N.interval <= J)
      {
        var L = N.run.apply(N.scope || N, N.args || [++N.taskRunCount]);
        N.taskRunTime = M;
        if (L === false || N.taskRunCount === N.repeat)
        {
          C(N);
          return
        }
      }
      if (N.duration && N.duration <= (M - N.taskStartTime))
      {
        C(N)
      }
    }
  };
  this.start = function(J)
  {
    F.push(J);
    J.taskStartTime = new Date().getTime();
    J.taskRunTime = 0;
    J.taskRunCount = 0;
    H();
    return J
  };
  this.stop = function(J)
  {
    C(J);
    return J
  };
  this.stopAll = function()
  {
    D();
    for (var K = 0,J = F.length; K < J; K++)
    {
      if (F[K].onStop)
      {
        F[K].onStop()
      }
    }
    F = [];
    A = []
  }
};
Ext.TaskMgr = new Ext.util.TaskRunner();
Ext.util.MixedCollection = function(B, A)
{
  this.items = [];
  this.map = {};
  this.keys = [];
  this.length = 0;
  this.addEvents({"clear":true,"add":true,"replace":true,"remove":true,"sort":true});
  this.allowFunctions = B === true;
  if (A)
  {
    this.getKey = A
  }
  Ext.util.MixedCollection.superclass.constructor.call(this)
};
Ext.extend(Ext.util.MixedCollection, Ext.util.Observable, {allowFunctions:false,add:function(B, C)
{
  if (arguments.length == 1)
  {
    C = arguments[0];
    B = this.getKey(C)
  }
  if (typeof B == "undefined" || B === null)
  {
    this.length++;
    this.items.push(C);
    this.keys.push(null)
  } else
  {
    var A = this.map[B];
    if (A)
    {
      return this.replace(B, C)
    }
    this.length++;
    this.items.push(C);
    this.map[B] = C;
    this.keys.push(B)
  }
  this.fireEvent("add", this.length - 1, C, B);
  return C
},getKey:function(A)
{
  return A.id
},replace:function(C, D)
{
  if (arguments.length == 1)
  {
    D = arguments[0];
    C = this.getKey(D)
  }
  var A = this.item(C);
  if (typeof C == "undefined" || C === null || typeof A == "undefined")
  {
    return this.add(C, D)
  }
  var B = this.indexOfKey(C);
  this.items[B] = D;
  this.map[C] = D;
  this.fireEvent("replace", C, A, D);
  return D
},addAll:function(E)
{
  if (arguments.length > 1 || E instanceof Array)
  {
    var B = arguments.length > 1 ? arguments : E;
    for (var D = 0,A = B.length; D < A; D++)
    {
      this.add(B[D])
    }
  } else
  {
    for (var C in E)
    {
      if (this.allowFunctions || typeof E[C] != "function")
      {
        this.add(C, E[C])
      }
    }
  }
},each:function(E, D)
{
  var B = [].concat(this.items);
  for (var C = 0,A = B.length; C < A; C++)
  {
    if (E.call(D || B[C], B[C], C, A) === false)
    {
      break
    }
  }
},eachKey:function(D, C)
{
  for (var B = 0,A = this.keys.length; B < A; B++)
  {
    D.call(C || window, this.keys[B], this.items[B], B, A)
  }
},find:function(D, C)
{
  for (var B = 0,A = this.items.length; B < A; B++)
  {
    if (D.call(C || window, this.items[B], this.keys[B]))
    {
      return this.items[B]
    }
  }
  return null
},insert:function(A, B, C)
{
  if (arguments.length == 2)
  {
    C = arguments[1];
    B = this.getKey(C)
  }
  if (A >= this.length)
  {
    return this.add(B, C)
  }
  this.length++;
  this.items.splice(A, 0, C);
  if (typeof B != "undefined" && B != null)
  {
    this.map[B] = C
  }
  this.keys.splice(A, 0, B);
  this.fireEvent("add", A, C, B);
  return C
},remove:function(A)
{
  return this.removeAt(this.indexOf(A))
},removeAt:function(A)
{
  if (A < this.length && A >= 0)
  {
    this.length--;
    var C = this.items[A];
    this.items.splice(A, 1);
    var B = this.keys[A];
    if (typeof B != "undefined")
    {
      delete this.map[B]
    }
    this.keys.splice(A, 1);
    this.fireEvent("remove", C, B)
  }
},removeKey:function(A)
{
  return this.removeAt(this.indexOfKey(A))
},getCount:function()
{
  return this.length
},indexOf:function(C)
{
  if (!this.items.indexOf)
  {
    for (var B = 0,A = this.items.length; B < A; B++)
    {
      if (this.items[B] == C)
      {
        return B
      }
    }
    return -1
  } else
  {
    return this.items.indexOf(C)
  }
},indexOfKey:function(C)
{
  if (!this.keys.indexOf)
  {
    for (var B = 0,A = this.keys.length; B < A; B++)
    {
      if (this.keys[B] == C)
      {
        return B
      }
    }
    return -1
  } else
  {
    return this.keys.indexOf(C)
  }
},item:function(A)
{
  var B = typeof this.map[A] != "undefined" ? this.map[A] : this.items[A];
  return typeof B != "function" || this.allowFunctions ? B : null
},itemAt:function(A)
{
  return this.items[A]
},key:function(A)
{
  return this.map[A]
},contains:function(A)
{
  return this.indexOf(A) != -1
},containsKey:function(A)
{
  return typeof this.map[A] != "undefined"
},clear:function()
{
  this.length = 0;
  this.items = [];
  this.keys = [];
  this.map = {};
  this.fireEvent("clear")
},first:function()
{
  return this.items[0]
},last:function()
{
  return this.items[this.length - 1]
},_sort:function(I, A, H)
{
  var C = String(A).toUpperCase() == "DESC" ? -1 : 1;
  H = H || function(K, J)
  {
    return K - J
  };
  var G = [],B = this.keys,F = this.items;
  for (var D = 0,E = F.length; D < E; D++)
  {
    G[G.length] = {key:B[D],value:F[D],index:D}
  }
  G.sort(function(K, J)
  {
    var L = H(K[I], J[I]) * C;
    if (L == 0)
    {
      L = (K.index < J.index ? -1 : 1)
    }
    return L
  });
  for (var D = 0,E = G.length; D < E; D++)
  {
    F[D] = G[D].value;
    B[D] = G[D].key
  }
  this.fireEvent("sort", this)
},sort:function(A, B)
{
  this._sort("value", A, B)
},keySort:function(A, B)
{
  this._sort("key", A, B || function(D, C)
  {
    return String(D).toUpperCase() - String(C).toUpperCase()
  })
},getRange:function(E, A)
{
  var B = this.items;
  if (B.length < 1)
  {
    return[]
  }
  E = E || 0;
  A = Math.min(typeof A == "undefined" ? this.length - 1 : A, this.length - 1);
  var D = [];
  if (E <= A)
  {
    for (var C = E; C <= A; C++)
    {
      D[D.length] = B[C]
    }
  } else
  {
    for (var C = E; C >= A; C--)
    {
      D[D.length] = B[C]
    }
  }
  return D
},filter:function(B, A)
{
  if (!A.exec)
  {
    A = String(A);
    if (A.length == 0)
    {
      return this.clone()
    }
    A = new RegExp("^" + Ext.escapeRe(A), "i")
  }
  return this.filterBy(function(C)
  {
    return C && A.test(C[B])
  })
},filterBy:function(F, E)
{
  var G = new Ext.util.MixedCollection();
  G.getKey = this.getKey;
  var B = this.keys,D = this.items;
  for (var C = 0,A = D.length; C < A; C++)
  {
    if (F.call(E || this, D[C], B[C]))
    {
      G.add(B[C], D[C])
    }
  }
  return G
},clone:function()
{
  var E = new Ext.util.MixedCollection();
  var B = this.keys,D = this.items;
  for (var C = 0,A = D.length; C < A; C++)
  {
    E.add(B[C], D[C])
  }
  E.getKey = this.getKey;
  return E
}});
Ext.util.MixedCollection.prototype.get = Ext.util.MixedCollection.prototype.item;
Ext.util.JSON = new (function()
{
  var useHasOwn = {}.hasOwnProperty ? true : false;
  var pad = function(n)
  {
    return n < 10 ? "0" + n : n
  };
  var m = {"\b":"\\b","\t":"\\t","\n":"\\n","\f":"\\f","\r":"\\r","\"":"\\\"","\\":"\\\\"};
  var encodeString = function(s)
  {
    if (/["\\\x00-\x1f]/.test(s))
    {
      return"\"" + s.replace(/([\x00-\x1f\\"])/g, function(a, b)
      {
        var c = m[b];
        if (c)
        {
          return c
        }
        c = b.charCodeAt();
        return"\\u00" + Math.floor(c / 16).toString(16) + (c % 16).toString(16)
      }) + "\""
    }
    return"\"" + s + "\""
  };
  var encodeArray = function(o)
  {
    var a = ["["],b,i,l = o.length,v;
    for (i = 0; i < l; i += 1)
    {
      v = o[i];
      switch (typeof v)
          {case"undefined":case"function":case"unknown":break;default:if (b)
      {
        a.push(",")
      }a.push(v === null ? "null" : Ext.util.JSON.encode(v));b = true}
    }
    a.push("]");
    return a.join("")
  };
  var encodeDate = function(o)
  {
    return"\"" + o.getFullYear() + "-" + pad(o.getMonth() + 1) + "-" + pad(o.getDate()) + "T" + pad(o.getHours()) + ":" + pad(o.getMinutes()) + ":" + pad(o.getSeconds()) + "\""
  };
  this.encode = function(o)
  {
    if (typeof o == "undefined" || o === null)
    {
      return"null"
    } else
    {
      if (o instanceof Array)
      {
        return encodeArray(o)
      } else
      {
        if (o instanceof Date)
        {
          return encodeDate(o)
        } else
        {
          if (typeof o == "string")
          {
            return encodeString(o)
          } else
          {
            if (typeof o == "number")
            {
              return isFinite(o) ? String(o) : "null"
            } else
            {
              if (typeof o == "boolean")
              {
                return String(o)
              } else
              {
                var a = ["{"],b,i,v;
                for (i in o)
                {
                  if (!useHasOwn || o.hasOwnProperty(i))
                  {
                    v = o[i];
                    switch (typeof v)
                        {case"undefined":case"function":case"unknown":break;default:if (b)
                    {
                      a.push(",")
                    }a.push(this.encode(i), ":", v === null ? "null" : this.encode(v));b = true}
                  }
                }
                a.push("}");
                return a.join("")
              }
            }
          }
        }
      }
    }
  };
  this.decode = function(json)
  {
    return eval("(" + json + ")")
  }
})();
Ext.encode = Ext.util.JSON.encode;
Ext.decode = Ext.util.JSON.decode;
Ext.util.Format = function()
{
  var trimRe = /^\s+|\s+$/g;
  return{ellipsis:function(value, len)
  {
    if (value && value.length > len)
    {
      return value.substr(0, len - 3) + "..."
    }
    return value
  },undef:function(value)
  {
    return typeof value != "undefined" ? value : ""
  },htmlEncode:function(value)
  {
    return !value ? value : String(value).replace(/&/g, "&amp;").replace(/>/g, "&gt;").replace(/</g, "&lt;").replace(/"/g, "&quot;")
  },htmlDecode:function(value)
  {
    return !value ? value : String(value).replace(/&amp;/g, "&").replace(/&gt;/g, ">").replace(/&lt;/g, "<").replace(/&quot;/g, "\"")
  },trim:function(value)
  {
    return String(value).replace(trimRe, "")
  },substr:function(value, start, length)
  {
    return String(value).substr(start, length)
  },lowercase:function(value)
  {
    return String(value).toLowerCase()
  },uppercase:function(value)
  {
    return String(value).toUpperCase()
  },capitalize:function(value)
  {
    return !value ? value : value.charAt(0).toUpperCase() + value.substr(1).toLowerCase()
  },call:function(value, fn)
  {
    if (arguments.length > 2)
    {
      var args = Array.prototype.slice.call(arguments, 2);
      args.unshift(value);
      return eval(fn).apply(window, args)
    } else
    {
      return eval(fn).call(window, value)
    }
  },usMoney:function(v)
  {
    v = (Math.round((v - 0) * 100)) / 100;
    v = (v == Math.floor(v)) ? v + ".00" : ((v * 10 == Math.floor(v * 10)) ? v + "0" : v);
    v = String(v);
    var ps = v.split(".");
    var whole = ps[0];
    var sub = ps[1] ? "." + ps[1] : ".00";
    var r = /(\d+)(\d{3})/;
    while (r.test(whole))
    {
      whole = whole.replace(r, "$1" + "," + "$2")
    }
    return"$" + whole + sub
  },date:function(v, format)
  {
    if (!v)
    {
      return""
    }
    if (!(v instanceof Date))
    {
      v = new Date(Date.parse(v))
    }
    return v.dateFormat(format || "m/d/Y")
  },dateRenderer:function(format)
  {
    return function(v)
    {
      return Ext.util.Format.date(v, format)
    }
  },stripTagsRE:/<\/?[^>]+>/gi,stripTags:function(v)
  {
    return !v ? v : String(v).replace(this.stripTagsRE, "")
  }}
}();
Ext.MasterTemplate = function()
{
  Ext.MasterTemplate.superclass.constructor.apply(this, arguments);
  this.originalHtml = this.html;
  var D = {};
  var A,E = this.subTemplateRe;
  E.lastIndex = 0;
  var C = 0;
  while (A = E.exec(this.html))
  {
    var B = A[1],F = A[2];
    D[C] = {name:B,index:C,buffer:[],tpl:new Ext.Template(F)};
    if (B)
    {
      D[B] = D[C]
    }
    D[C].tpl.compile();
    D[C].tpl.call = this.call.createDelegate(this);
    C++
  }
  this.subCount = C;
  this.subs = D
};
Ext.extend(Ext.MasterTemplate, Ext.Template, {subTemplateRe:/<tpl(?:\sname="([\w-]+)")?>((?:.|\n)*?)<\/tpl>/gi,add:function(B, A)
{
  if (arguments.length == 1)
  {
    A = arguments[0];
    B = 0
  }
  var C = this.subs[B];
  C.buffer[C.buffer.length] = C.tpl.apply(A);
  return this
},fill:function(D, C, F)
{
  var B = arguments;
  if (B.length == 1 || (B.length == 2 && typeof B[1] == "boolean"))
  {
    C = B[0];
    D = 0;
    F = B[1]
  }
  if (F)
  {
    this.reset()
  }
  for (var E = 0,A = C.length; E < A; E++)
  {
    this.add(D, C[E])
  }
  return this
},reset:function()
{
  var B = this.subs;
  for (var A = 0; A < this.subCount; A++)
  {
    B[A].buffer = []
  }
  return this
},applyTemplate:function(A)
{
  var B = this.subs;
  var C = -1;
  this.html = this.originalHtml.replace(this.subTemplateRe, function(D, E)
  {
    return B[++C].buffer.join("")
  });
  return Ext.MasterTemplate.superclass.applyTemplate.call(this, A)
},apply:function()
{
  return this.applyTemplate.apply(this, arguments)
},compile:function()
{
  return this
}});
Ext.MasterTemplate.prototype.addAll = Ext.MasterTemplate.prototype.fill;
Ext.MasterTemplate.from = function(B, A)
{
  B = Ext.getDom(B);
  return new Ext.MasterTemplate(B.value || B.innerHTML, A || "")
};
Ext.XTemplate = function()
{
  Ext.XTemplate.superclass.constructor.apply(this, arguments);
  var P = this.html;
  P = ["<tpl>",P,"</tpl>"].join("");
  var O = /<tpl\b[^>]*>((?:(?=([^<]+))\2|<(?!tpl\b[^>]*>))*?)<\/tpl>/;
  var N = /^<tpl\b[^>]*?for="(.*?)"/;
  var L = /^<tpl\b[^>]*?if="(.*?)"/;
  var J = /^<tpl\b[^>]*?exec="(.*?)"/;
  var C,B = 0;
  var G = [];
  while (C = P.match(O))
  {
    var M = C[0].match(N);
    var K = C[0].match(L);
    var I = C[0].match(J);
    var E = null,H = null,D = null;
    var A = M && M[1] ? M[1] : "";
    if (K)
    {
      E = K && K[1] ? K[1] : null;
      if (E)
      {
        H = new Function("values", "parent", "with(values){ return " + (Ext.util.Format.htmlDecode(E)) + "; }")
      }
    }
    if (I)
    {
      E = I && I[1] ? I[1] : null;
      if (E)
      {
        D = new Function("values", "parent", "with(values){ " + (Ext.util.Format.htmlDecode(E)) + "; }")
      }
    }
    if (A)
    {
      switch (A)
          {case".":A = new Function("values", "parent", "with(values){ return values; }");break;case"..":A = new Function("values", "parent", "with(values){ return parent; }");break;default:A = new Function("values", "parent", "with(values){ return " + A + "; }")}
    }
    G.push({id:B,target:A,exec:D,test:H,body:C[1] || ""});
    P = P.replace(C[0], "{xtpl" + B + "}");
    ++B
  }
  for (var F = G.length - 1; F >= 0; --F)
  {
    this.compileTpl(G[F])
  }
  this.master = G[G.length - 1];
  this.tpls = G
};
Ext.extend(Ext.XTemplate, Ext.Template, {re:/\{([\w-\.]+)(?:\:([\w\.]*)(?:\((.*?)?\))?)?\}/g,applySubTemplate:function(H, B, F)
{
  var E = this.tpls[H];
  if (E.test && !E.test.call(this, B, F))
  {
    return""
  }
  if (E.exec && E.exec.call(this, B, F))
  {
    return""
  }
  var G = E.target ? E.target.call(this, B, F) : B;
  F = E.target ? B : F;
  if (E.target && G instanceof Array)
  {
    var C = [];
    for (var D = 0,A = G.length; D < A; D++)
    {
      C[C.length] = E.compiled.call(this, G[D], F)
    }
    return C.join("")
  }
  return E.compiled.call(this, G, F)
},compileTpl:function(tpl)
{
  var fm = Ext.util.Format;
  var useF = this.disableFormats !== true;
  var sep = Ext.isGecko ? "+" : ",";
  var fn = function(m, name, format, args)
  {
    if (name.substr(0, 4) == "xtpl")
    {
      return"'" + sep + "this.applySubTemplate(" + name.substr(4) + ", values, parent)" + sep + "'"
    }
    var v;
    if (name.indexOf(".") != -1)
    {
      v = name
    } else
    {
      v = "values['" + name + "']"
    }
    if (format && useF)
    {
      args = args ? "," + args : "";
      if (format.substr(0, 5) != "this.")
      {
        format = "fm." + format + "("
      } else
      {
        format = "this.call(\"" + format.substr(5) + "\", ";
        args = ", values"
      }
    } else
    {
      args = "";
      format = "(" + v + " === undefined ? '' : "
    }
    return"'" + sep + format + v + args + ")" + sep + "'"
  };
  var body;
  if (Ext.isGecko)
  {
    body = "tpl.compiled = function(values, parent){ return '" + tpl.body.replace(/(\r\n|\n)/g, "\\n").replace(/'/g, "\\'").replace(this.re, fn) + "';};"
  } else
  {
    body = ["tpl.compiled = function(values, parent){ return ['"];
    body.push(tpl.body.replace(/(\r\n|\n)/g, "\\n").replace(/'/g, "\\'").replace(this.re, fn));
    body.push("'].join('');};");
    body = body.join("")
  }
  eval(body);
  return this
},applyTemplate:function(A)
{
  return this.master.compiled.call(this, A, {});
  var B = this.subs
},apply:function()
{
  return this.applyTemplate.apply(this, arguments)
},compile:function()
{
  return this
}});
Ext.XTemplate.from = function(A)
{
  A = Ext.getDom(A);
  return new Ext.XTemplate(A.value || A.innerHTML)
};
Ext.util.CSS = function()
{
  var D = null;
  var C = document;
  var B = /(-[a-z])/gi;
  var A = function(E, F)
  {
    return F.charAt(1).toUpperCase()
  };
  return{createStyleSheet:function(G, J)
  {
    var F;
    var E = C.getElementsByTagName("head")[0];
    var I = C.createElement("style");
    I.setAttribute("type", "text/css");
    if (J)
    {
      I.setAttribute("id", J)
    }
    if (Ext.isIE)
    {
      E.appendChild(I);
      F = I.styleSheet;
      F.cssText = G
    } else
    {
      try
      {
        I.appendChild(C.createTextNode(G))
      } catch(H)
      {
        I.cssText = G
      }
      E.appendChild(I);
      F = I.styleSheet ? I.styleSheet : (I.sheet || C.styleSheets[C.styleSheets.length - 1])
    }
    this.cacheStyleSheet(F);
    return F
  },removeStyleSheet:function(F)
  {
    var E = C.getElementById(F);
    if (E)
    {
      E.parentNode.removeChild(E)
    }
  },swapStyleSheet:function(G, E)
  {
    this.removeStyleSheet(G);
    var F = C.createElement("link");
    F.setAttribute("rel", "stylesheet");
    F.setAttribute("type", "text/css");
    F.setAttribute("id", G);
    F.setAttribute("href", E);
    C.getElementsByTagName("head")[0].appendChild(F)
  },refreshCache:function()
  {
    return this.getRules(true)
  },cacheStyleSheet:function(F)
  {
    if (!D)
    {
      D = {}
    }
    try
    {
      var H = F.cssRules || F.rules;
      for (var E = H.length - 1; E >= 0; --E)
      {
        D[H[E].selectorText] = H[E]
      }
    } catch(G)
    {
    }
  },getRules:function(F)
  {
    if (D == null || F)
    {
      D = {};
      var H = C.styleSheets;
      for (var G = 0,E = H.length; G < E; G++)
      {
        try
        {
          this.cacheStyleSheet(H[G])
        } catch(I)
        {
        }
      }
    }
    return D
  },getRule:function(E, G)
  {
    var F = this.getRules(G);
    if (!(E instanceof Array))
    {
      return F[E]
    }
    for (var H = 0; H < E.length; H++)
    {
      if (F[E[H]])
      {
        return F[E[H]]
      }
    }
    return null
  },updateRule:function(E, H, G)
  {
    if (!(E instanceof Array))
    {
      var I = this.getRule(E);
      if (I)
      {
        I.style[H.replace(B, A)] = G;
        return true
      }
    } else
    {
      for (var F = 0; F < E.length; F++)
      {
        if (this.updateRule(E[F], H, G))
        {
          return true
        }
      }
    }
    return false
  }}
}();
Ext.util.ClickRepeater = function(B, A)
{
  this.el = Ext.get(B);
  this.el.unselectable();
  Ext.apply(this, A);
  this.addEvents({"mousedown":true,"click":true,"mouseup":true});
  this.el.on("mousedown", this.handleMouseDown, this);
  if (this.preventDefault || this.stopDefault)
  {
    this.el.on("click", function(C)
    {
      if (this.preventDefault)
      {
        C.preventDefault()
      }
      if (this.stopDefault)
      {
        C.stopEvent()
      }
    }, this)
  }
  if (this.handler)
  {
    this.on("click", this.handler, this.scope || this)
  }
  Ext.util.ClickRepeater.superclass.constructor.call(this)
};
Ext.extend(Ext.util.ClickRepeater, Ext.util.Observable, {interval:20,delay:250,preventDefault:true,stopDefault:false,timer:0,handleMouseDown:function()
{
  clearTimeout(this.timer);
  this.el.blur();
  if (this.pressClass)
  {
    this.el.addClass(this.pressClass)
  }
  this.mousedownTime = new Date();
  Ext.get(document).on("mouseup", this.handleMouseUp, this);
  this.el.on("mouseout", this.handleMouseOut, this);
  this.fireEvent("mousedown", this);
  this.fireEvent("click", this);
  this.timer = this.click.defer(this.delay || this.interval, this)
},click:function()
{
  this.fireEvent("click", this);
  this.timer = this.click.defer(this.getInterval(), this)
},getInterval:function()
{
  if (!this.accelerate)
  {
    return this.interval
  }
  var A = this.mousedownTime.getElapsed();
  if (A < 500)
  {
    return 400
  } else
  {
    if (A < 1700)
    {
      return 320
    } else
    {
      if (A < 2600)
      {
        return 250
      } else
      {
        if (A < 3500)
        {
          return 180
        } else
        {
          if (A < 4400)
          {
            return 140
          } else
          {
            if (A < 5300)
            {
              return 80
            } else
            {
              if (A < 6200)
              {
                return 50
              } else
              {
                return 10
              }
            }
          }
        }
      }
    }
  }
},handleMouseOut:function()
{
  clearTimeout(this.timer);
  if (this.pressClass)
  {
    this.el.removeClass(this.pressClass)
  }
  this.el.on("mouseover", this.handleMouseReturn, this)
},handleMouseReturn:function()
{
  this.el.un("mouseover", this.handleMouseReturn);
  if (this.pressClass)
  {
    this.el.addClass(this.pressClass)
  }
  this.click()
},handleMouseUp:function()
{
  clearTimeout(this.timer);
  this.el.un("mouseover", this.handleMouseReturn);
  this.el.un("mouseout", this.handleMouseOut);
  Ext.get(document).un("mouseup", this.handleMouseUp);
  this.el.removeClass(this.pressClass);
  this.fireEvent("mouseup", this)
}});
Ext.KeyNav = function(B, A)
{
  this.el = Ext.get(B);
  Ext.apply(this, A);
  if (!this.disabled)
  {
    this.disabled = true;
    this.enable()
  }
};
Ext.KeyNav.prototype = {disabled:false,defaultEventAction:"stopEvent",forceKeyDown:false,prepareEvent:function(C)
{
  var A = C.getKey();
  var B = this.keyToHandler[A];
  if (Ext.isSafari && B && A >= 37 && A <= 40)
  {
    C.stopEvent()
  }
},relay:function(C)
{
  var A = C.getKey();
  var B = this.keyToHandler[A];
  if (B && this[B])
  {
    if (this.doRelay(C, this[B], B) !== true)
    {
      C[this.defaultEventAction]()
    }
  }
},doRelay:function(C, B, A)
{
  return B.call(this.scope || this, C)
},enter:false,left:false,right:false,up:false,down:false,tab:false,esc:false,pageUp:false,pageDown:false,del:false,home:false,end:false,keyToHandler:{37:"left",39:"right",38:"up",40:"down",33:"pageUp",34:"pageDown",46:"del",36:"home",35:"end",13:"enter",27:"esc",9:"tab"},enable:function()
{
  if (this.disabled)
  {
    if (this.forceKeyDown || Ext.isIE || Ext.isAir)
    {
      this.el.on("keydown", this.relay, this)
    } else
    {
      this.el.on("keydown", this.prepareEvent, this);
      this.el.on("keypress", this.relay, this)
    }
    this.disabled = false
  }
},disable:function()
{
  if (!this.disabled)
  {
    if (this.forceKeyDown || Ext.isIE || Ext.isAir)
    {
      this.el.un("keydown", this.relay)
    } else
    {
      this.el.un("keydown", this.prepareEvent);
      this.el.un("keypress", this.relay)
    }
    this.disabled = true
  }
}};
Ext.KeyMap = function(C, B, A)
{
  this.el = Ext.get(C);
  this.eventName = A || "keydown";
  this.bindings = [];
  if (B)
  {
    this.addBinding(B)
  }
  this.enable()
};
Ext.KeyMap.prototype = {stopEvent:false,addBinding:function(D)
{
  if (D instanceof Array)
  {
    for (var F = 0,H = D.length; F < H; F++)
    {
      this.addBinding(D[F])
    }
    return
  }
  var N = D.key,C = D.shift,A = D.ctrl,G = D.alt,J = D.fn,M = D.scope;
  if (typeof N == "string")
  {
    var K = [];
    var I = N.toUpperCase();
    for (var E = 0,H = I.length; E < H; E++)
    {
      K.push(I.charCodeAt(E))
    }
    N = K
  }
  var B = N instanceof Array;
  var L = function(R)
  {
    if ((!C || R.shiftKey) && (!A || R.ctrlKey) && (!G || R.altKey))
    {
      var P = R.getKey();
      if (B)
      {
        for (var Q = 0,O = N.length; Q < O; Q++)
        {
          if (N[Q] == P)
          {
            if (this.stopEvent)
            {
              R.stopEvent()
            }
            J.call(M || window, P, R);
            return
          }
        }
      } else
      {
        if (P == N)
        {
          if (this.stopEvent)
          {
            R.stopEvent()
          }
          J.call(M || window, P, R)
        }
      }
    }
  };
  this.bindings.push(L)
},on:function(B, D, C)
{
  var G,A,E,F;
  if (typeof B == "object" && !(B instanceof Array))
  {
    G = B.key;
    A = B.shift;
    E = B.ctrl;
    F = B.alt
  } else
  {
    G = B
  }
  this.addBinding({key:G,shift:A,ctrl:E,alt:F,fn:D,scope:C})
},handleKeyDown:function(D)
{
  if (this.enabled)
  {
    var B = this.bindings;
    for (var C = 0,A = B.length; C < A; C++)
    {
      B[C].call(this, D)
    }
  }
},isEnabled:function()
{
  return this.enabled
},enable:function()
{
  if (!this.enabled)
  {
    this.el.on(this.eventName, this.handleKeyDown, this);
    this.enabled = true
  }
},disable:function()
{
  if (this.enabled)
  {
    this.el.removeListener(this.eventName, this.handleKeyDown, this);
    this.enabled = false
  }
}};
Ext.util.TextMetrics = function()
{
  var A;
  return{measure:function(B, C, D)
  {
    if (!A)
    {
      A = Ext.util.TextMetrics.Instance(B, D)
    }
    A.bind(B);
    A.setFixedWidth(D || "auto");
    return A.getSize(C)
  },createInstance:function(B, C)
  {
    return Ext.util.TextMetrics.Instance(B, C)
  }}
}();
Ext.util.TextMetrics.Instance = function(B, D)
{
  var C = new Ext.Element(document.createElement("div"));
  document.body.appendChild(C.dom);
  C.position("absolute");
  C.setLeftTop(-1000, -1000);
  C.hide();
  if (D)
  {
    C.setWidth(D)
  }
  var A = {getSize:function(F)
  {
    C.update(F);
    var E = C.getSize();
    C.update("");
    return E
  },bind:function(E)
  {
    C.setStyle(Ext.fly(E).getStyles("font-size", "font-style", "font-weight", "font-family", "line-height"))
  },setFixedWidth:function(E)
  {
    C.setWidth(E)
  },getWidth:function(E)
  {
    C.dom.style.width = "auto";
    return this.getSize(E).width
  },getHeight:function(E)
  {
    return this.getSize(E).height
  }};
  A.bind(B);
  return A
};
Ext.Element.measureText = Ext.util.TextMetrics.measure;
Ext.state.Provider = function()
{
  this.addEvents({"statechange":true});
  this.state = {};
  Ext.state.Provider.superclass.constructor.call(this)
};
Ext.extend(Ext.state.Provider, Ext.util.Observable, {get:function(B, A)
{
  return typeof this.state[B] == "undefined" ? A : this.state[B]
},clear:function(A)
{
  delete this.state[A];
  this.fireEvent("statechange", this, A, null)
},set:function(A, B)
{
  this.state[A] = B;
  this.fireEvent("statechange", this, A, B)
},decodeValue:function(A)
{
  var J = /^(a|n|d|b|s|o)\:(.*)$/;
  var C = J.exec(unescape(A));
  if (!C || !C[1])
  {
    return
  }
  var F = C[1];
  var H = C[2];
  switch (F)
      {case"n":return parseFloat(H);case"d":return new Date(Date.parse(H));case"b":return(H == "1");case"a":var G = [];var I = H.split("^");for (var B = 0,D = I.length; B < D; B++)
  {
    G.push(this.decodeValue(I[B]))
  }return G;case"o":var G = {};var I = H.split("^");for (var B = 0,D = I.length; B < D; B++)
  {
    var E = I[B].split("=");
    G[E[0]] = this.decodeValue(E[1])
  }return G;default:return H}
},encodeValue:function(C)
{
  var B;
  if (typeof C == "number")
  {
    B = "n:" + C
  } else
  {
    if (typeof C == "boolean")
    {
      B = "b:" + (C ? "1" : "0")
    } else
    {
      if (C instanceof Date)
      {
        B = "d:" + C.toGMTString()
      } else
      {
        if (C instanceof Array)
        {
          var F = "";
          for (var E = 0,A = C.length; E < A; E++)
          {
            F += this.encodeValue(C[E]);
            if (E != A - 1)
            {
              F += "^"
            }
          }
          B = "a:" + F
        } else
        {
          if (typeof C == "object")
          {
            var F = "";
            for (var D in C)
            {
              if (typeof C[D] != "function")
              {
                F += D + "=" + this.encodeValue(C[D]) + "^"
              }
            }
            B = "o:" + F.substring(0, F.length - 1)
          } else
          {
            B = "s:" + C
          }
        }
      }
    }
  }
  return escape(B)
}});
Ext.state.Manager = function()
{
  var A = new Ext.state.Provider();
  return{setProvider:function(B)
  {
    A = B
  },get:function(C, B)
  {
    return A.get(C, B)
  },set:function(B, C)
  {
    A.set(B, C)
  },clear:function(B)
  {
    A.clear(B)
  },getProvider:function()
  {
    return A
  }}
}();
Ext.state.CookieProvider = function(A)
{
  Ext.state.CookieProvider.superclass.constructor.call(this);
  this.path = "/";
  this.expires = new Date(new Date().getTime() + (1000 * 60 * 60 * 24 * 7));
  this.domain = null;
  this.secure = false;
  Ext.apply(this, A);
  this.state = this.readCookies()
};
Ext.extend(Ext.state.CookieProvider, Ext.state.Provider, {set:function(A, B)
{
  if (typeof B == "undefined" || B === null)
  {
    this.clear(A);
    return
  }
  this.setCookie(A, B);
  Ext.state.CookieProvider.superclass.set.call(this, A, B)
},clear:function(A)
{
  this.clearCookie(A);
  Ext.state.CookieProvider.superclass.clear.call(this, A)
},readCookies:function()
{
  var C = {};
  var F = document.cookie + ";";
  var B = /\s?(.*?)=(.*?);/g;
  var E;
  while ((E = B.exec(F)) != null)
  {
    var A = E[1];
    var D = E[2];
    if (A && A.substring(0, 3) == "ys-")
    {
      C[A.substr(3)] = this.decodeValue(D)
    }
  }
  return C
},setCookie:function(A, B)
{
  document.cookie = "ys-" + A + "=" + this.encodeValue(B) + ((this.expires == null) ? "" : ("; expires=" + this.expires.toGMTString())) + ((this.path == null) ? "" : ("; path=" + this.path)) + ((this.domain == null) ? "" : ("; domain=" + this.domain)) + ((this.secure == true) ? "; secure" : "")
},clearCookie:function(A)
{
  document.cookie = "ys-" + A + "=null; expires=Thu, 01-Jan-70 00:00:01 GMT" + ((this.path == null) ? "" : ("; path=" + this.path)) + ((this.domain == null) ? "" : ("; domain=" + this.domain)) + ((this.secure == true) ? "; secure" : "")
}});
(function()
{
  var A = Ext.EventManager;
  var B = Ext.lib.Dom;
  Ext.dd.DragDrop = function(E, C, D)
  {
    if (E)
    {
      this.init(E, C, D)
    }
  };
  Ext.dd.DragDrop.prototype = {id:null,config:null,dragElId:null,handleElId:null,invalidHandleTypes:null,invalidHandleIds:null,invalidHandleClasses:null,startPageX:0,startPageY:0,groups:null,locked:false,lock:function()
  {
    this.locked = true
  },unlock:function()
  {
    this.locked = false
  },isTarget:true,padding:null,_domRef:null,__ygDragDrop:true,constrainX:false,constrainY:false,minX:0,maxX:0,minY:0,maxY:0,maintainOffset:false,xTicks:null,yTicks:null,primaryButtonOnly:true,available:false,hasOuterHandles:false,b4StartDrag:function(C, D)
  {
  },startDrag:function(C, D)
  {
  },b4Drag:function(C)
  {
  },onDrag:function(C)
  {
  },onDragEnter:function(C, D)
  {
  },b4DragOver:function(C)
  {
  },onDragOver:function(C, D)
  {
  },b4DragOut:function(C)
  {
  },onDragOut:function(C, D)
  {
  },b4DragDrop:function(C)
  {
  },onDragDrop:function(C, D)
  {
  },onInvalidDrop:function(C)
  {
  },b4EndDrag:function(C)
  {
  },endDrag:function(C)
  {
  },b4MouseDown:function(C)
  {
  },onMouseDown:function(C)
  {
  },onMouseUp:function(C)
  {
  },onAvailable:function()
  {
  },defaultPadding:{left:0,right:0,top:0,bottom:0},constrainTo:function(H, F, L)
  {
    if (typeof F == "number")
    {
      F = {left:F,right:F,top:F,bottom:F}
    }
    F = F || this.defaultPadding;
    var J = Ext.get(this.getEl()).getBox();
    var C = Ext.get(H);
    var K = C.getScroll();
    var I,D = C.dom;
    if (D == document.body)
    {
      I = {x:K.left,y:K.top,width:Ext.lib.Dom.getViewWidth(),height:Ext.lib.Dom.getViewHeight()}
    } else
    {
      xy = C.getXY();
      I = {x:xy[0] + K.left,y:xy[1] + K.top,width:D.clientWidth,height:D.clientHeight}
    }
    var G = J.y - I.y;
    var E = J.x - I.x;
    this.resetConstraints();
    this.setXConstraint(E - (F.left || 0), I.width - E - J.width - (F.right || 0));
    this.setYConstraint(G - (F.top || 0), I.height - G - J.height - (F.bottom || 0))
  },getEl:function()
  {
    if (!this._domRef)
    {
      this._domRef = Ext.getDom(this.id)
    }
    return this._domRef
  },getDragEl:function()
  {
    return Ext.getDom(this.dragElId)
  },init:function(E, C, D)
  {
    this.initTarget(E, C, D);
    A.on(this.id, "mousedown", this.handleMouseDown, this)
  },initTarget:function(E, C, D)
  {
    this.config = D || {};
    this.DDM = Ext.dd.DDM;
    this.groups = {};
    if (typeof E !== "string")
    {
      E = Ext.id(E)
    }
    this.id = E;
    this.addToGroup((C) ? C : "default");
    this.handleElId = E;
    this.setDragElId(E);
    this.invalidHandleTypes = {A:"A"};
    this.invalidHandleIds = {};
    this.invalidHandleClasses = [];
    this.applyConfig();
    this.handleOnAvailable()
  },applyConfig:function()
  {
    this.padding = this.config.padding || [0,0,0,0];
    this.isTarget = (this.config.isTarget !== false);
    this.maintainOffset = (this.config.maintainOffset);
    this.primaryButtonOnly = (this.config.primaryButtonOnly !== false)
  },handleOnAvailable:function()
  {
    this.available = true;
    this.resetConstraints();
    this.onAvailable()
  },setPadding:function(E, C, F, D)
  {
    if (!C && 0 !== C)
    {
      this.padding = [E,E,E,E]
    } else
    {
      if (!F && 0 !== F)
      {
        this.padding = [E,C,E,C]
      } else
      {
        this.padding = [E,C,F,D]
      }
    }
  },setInitPosition:function(F, E)
  {
    var G = this.getEl();
    if (!this.DDM.verifyEl(G))
    {
      return
    }
    var D = F || 0;
    var C = E || 0;
    var H = B.getXY(G);
    this.initPageX = H[0] - D;
    this.initPageY = H[1] - C;
    this.lastPageX = H[0];
    this.lastPageY = H[1];
    this.setStartPosition(H)
  },setStartPosition:function(D)
  {
    var C = D || B.getXY(this.getEl());
    this.deltaSetXY = null;
    this.startPageX = C[0];
    this.startPageY = C[1]
  },addToGroup:function(C)
  {
    this.groups[C] = true;
    this.DDM.regDragDrop(this, C)
  },removeFromGroup:function(C)
  {
    if (this.groups[C])
    {
      delete this.groups[C]
    }
    this.DDM.removeDDFromGroup(this, C)
  },setDragElId:function(C)
  {
    this.dragElId = C
  },setHandleElId:function(C)
  {
    if (typeof C !== "string")
    {
      C = Ext.id(C)
    }
    this.handleElId = C;
    this.DDM.regHandle(this.id, C)
  },setOuterHandleElId:function(C)
  {
    if (typeof C !== "string")
    {
      C = Ext.id(C)
    }
    A.on(C, "mousedown", this.handleMouseDown, this);
    this.setHandleElId(C);
    this.hasOuterHandles = true
  },unreg:function()
  {
    A.un(this.id, "mousedown", this.handleMouseDown);
    this._domRef = null;
    this.DDM._remove(this)
  },destroy:function()
  {
    this.unreg()
  },isLocked:function()
  {
    return(this.DDM.isLocked() || this.locked)
  },handleMouseDown:function(E, D)
  {
    if (this.primaryButtonOnly && E.button != 0)
    {
      return
    }
    if (this.isLocked())
    {
      return
    }
    this.DDM.refreshCache(this.groups);
    var C = new Ext.lib.Point(Ext.lib.Event.getPageX(E), Ext.lib.Event.getPageY(E));
    if (!this.hasOuterHandles && !this.DDM.isOverTarget(C, this))
    {
    } else
    {
      if (this.clickValidator(E))
      {
        this.setStartPosition();
        this.b4MouseDown(E);
        this.onMouseDown(E);
        this.DDM.handleMouseDown(E, this);
        this.DDM.stopEvent(E)
      } else
      {
      }
    }
  },clickValidator:function(D)
  {
    var C = D.getTarget();
    return(this.isValidHandleChild(C) && (this.id == this.handleElId || this.DDM.handleWasClicked(C, this.id)))
  },addInvalidHandleType:function(C)
  {
    var D = C.toUpperCase();
    this.invalidHandleTypes[D] = D
  },addInvalidHandleId:function(C)
  {
    if (typeof C !== "string")
    {
      C = Ext.id(C)
    }
    this.invalidHandleIds[C] = C
  },addInvalidHandleClass:function(C)
  {
    this.invalidHandleClasses.push(C)
  },removeInvalidHandleType:function(C)
  {
    var D = C.toUpperCase();
    delete this.invalidHandleTypes[D]
  },removeInvalidHandleId:function(C)
  {
    if (typeof C !== "string")
    {
      C = Ext.id(C)
    }
    delete this.invalidHandleIds[C]
  },removeInvalidHandleClass:function(D)
  {
    for (var E = 0,C = this.invalidHandleClasses.length; E < C; ++E)
    {
      if (this.invalidHandleClasses[E] == D)
      {
        delete this.invalidHandleClasses[E]
      }
    }
  },isValidHandleChild:function(F)
  {
    var E = true;
    var H;
    try
    {
      H = F.nodeName.toUpperCase()
    } catch(G)
    {
      H = F.nodeName
    }
    E = E && !this.invalidHandleTypes[H];
    E = E && !this.invalidHandleIds[F.id];
    for (var D = 0,C = this.invalidHandleClasses.length; E && D < C; ++D)
    {
      E = !B.hasClass(F, this.invalidHandleClasses[D])
    }
    return E
  },setXTicks:function(F, C)
  {
    this.xTicks = [];
    this.xTickSize = C;
    var E = {};
    for (var D = this.initPageX; D >= this.minX; D = D - C)
    {
      if (!E[D])
      {
        this.xTicks[this.xTicks.length] = D;
        E[D] = true
      }
    }
    for (D = this.initPageX; D <= this.maxX; D = D + C)
    {
      if (!E[D])
      {
        this.xTicks[this.xTicks.length] = D;
        E[D] = true
      }
    }
    this.xTicks.sort(this.DDM.numericSort)
  },setYTicks:function(F, C)
  {
    this.yTicks = [];
    this.yTickSize = C;
    var E = {};
    for (var D = this.initPageY; D >= this.minY; D = D - C)
    {
      if (!E[D])
      {
        this.yTicks[this.yTicks.length] = D;
        E[D] = true
      }
    }
    for (D = this.initPageY; D <= this.maxY; D = D + C)
    {
      if (!E[D])
      {
        this.yTicks[this.yTicks.length] = D;
        E[D] = true
      }
    }
    this.yTicks.sort(this.DDM.numericSort)
  },setXConstraint:function(E, D, C)
  {
    this.leftConstraint = E;
    this.rightConstraint = D;
    this.minX = this.initPageX - E;
    this.maxX = this.initPageX + D;
    if (C)
    {
      this.setXTicks(this.initPageX, C)
    }
    this.constrainX = true
  },clearConstraints:function()
  {
    this.constrainX = false;
    this.constrainY = false;
    this.clearTicks()
  },clearTicks:function()
  {
    this.xTicks = null;
    this.yTicks = null;
    this.xTickSize = 0;
    this.yTickSize = 0
  },setYConstraint:function(C, E, D)
  {
    this.topConstraint = C;
    this.bottomConstraint = E;
    this.minY = this.initPageY - C;
    this.maxY = this.initPageY + E;
    if (D)
    {
      this.setYTicks(this.initPageY, D)
    }
    this.constrainY = true
  },resetConstraints:function()
  {
    if (this.initPageX || this.initPageX === 0)
    {
      var D = (this.maintainOffset) ? this.lastPageX - this.initPageX : 0;
      var C = (this.maintainOffset) ? this.lastPageY - this.initPageY : 0;
      this.setInitPosition(D, C)
    } else
    {
      this.setInitPosition()
    }
    if (this.constrainX)
    {
      this.setXConstraint(this.leftConstraint, this.rightConstraint, this.xTickSize)
    }
    if (this.constrainY)
    {
      this.setYConstraint(this.topConstraint, this.bottomConstraint, this.yTickSize)
    }
  },getTick:function(I, F)
  {
    if (!F)
    {
      return I
    } else
    {
      if (F[0] >= I)
      {
        return F[0]
      } else
      {
        for (var D = 0,C = F.length; D < C; ++D)
        {
          var E = D + 1;
          if (F[E] && F[E] >= I)
          {
            var H = I - F[D];
            var G = F[E] - I;
            return(G > H) ? F[D] : F[E]
          }
        }
        return F[F.length - 1]
      }
    }
  },toString:function()
  {
    return("DragDrop " + this.id)
  }}
})();
if (!Ext.dd.DragDropMgr)
{
  Ext.dd.DragDropMgr = function()
  {
    var A = Ext.EventManager;
    return{ids:{},handleIds:{},dragCurrent:null,dragOvers:{},deltaX:0,deltaY:0,preventDefault:true,stopPropagation:true,initalized:false,locked:false,init:function()
    {
      this.initialized = true
    },POINT:0,INTERSECT:1,mode:0,_execOnAll:function(D, C)
    {
      for (var E in this.ids)
      {
        for (var B in this.ids[E])
        {
          var F = this.ids[E][B];
          if (!this.isTypeOfDD(F))
          {
            continue
          }
          F[D].apply(F, C)
        }
      }
    },_onLoad:function()
    {
      this.init();
      A.on(document, "mouseup", this.handleMouseUp, this, true);
      A.on(document, "mousemove", this.handleMouseMove, this, true);
      A.on(window, "unload", this._onUnload, this, true);
      A.on(window, "resize", this._onResize, this, true)
    },_onResize:function(B)
    {
      this._execOnAll("resetConstraints", [])
    },lock:function()
    {
      this.locked = true
    },unlock:function()
    {
      this.locked = false
    },isLocked:function()
    {
      return this.locked
    },locationCache:{},useCache:true,clickPixelThresh:3,clickTimeThresh:350,dragThreshMet:false,clickTimeout:null,startX:0,startY:0,regDragDrop:function(C, B)
    {
      if (!this.initialized)
      {
        this.init()
      }
      if (!this.ids[B])
      {
        this.ids[B] = {}
      }
      this.ids[B][C.id] = C
    },removeDDFromGroup:function(D, B)
    {
      if (!this.ids[B])
      {
        this.ids[B] = {}
      }
      var C = this.ids[B];
      if (C && C[D.id])
      {
        delete C[D.id]
      }
    },_remove:function(C)
    {
      for (var B in C.groups)
      {
        if (B && this.ids[B][C.id])
        {
          delete this.ids[B][C.id]
        }
      }
      delete this.handleIds[C.id]
    },regHandle:function(C, B)
    {
      if (!this.handleIds[C])
      {
        this.handleIds[C] = {}
      }
      this.handleIds[C][B] = B
    },isDragDrop:function(B)
    {
      return(this.getDDById(B)) ? true : false
    },getRelated:function(F, C)
    {
      var E = [];
      for (var D in F.groups)
      {
        for (j in this.ids[D])
        {
          var B = this.ids[D][j];
          if (!this.isTypeOfDD(B))
          {
            continue
          }
          if (!C || B.isTarget)
          {
            E[E.length] = B
          }
        }
      }
      return E
    },isLegalTarget:function(F, E)
    {
      var C = this.getRelated(F, true);
      for (var D = 0,B = C.length; D < B; ++D)
      {
        if (C[D].id == E.id)
        {
          return true
        }
      }
      return false
    },isTypeOfDD:function(B)
    {
      return(B && B.__ygDragDrop)
    },isHandle:function(C, B)
    {
      return(this.handleIds[C] && this.handleIds[C][B])
    },getDDById:function(C)
    {
      for (var B in this.ids)
      {
        if (this.ids[B][C])
        {
          return this.ids[B][C]
        }
      }
      return null
    },handleMouseDown:function(D, C)
    {
      if (Ext.QuickTips)
      {
        Ext.QuickTips.disable()
      }
      this.currentTarget = D.getTarget();
      this.dragCurrent = C;
      var B = C.getEl();
      this.startX = D.getPageX();
      this.startY = D.getPageY();
      this.deltaX = this.startX - B.offsetLeft;
      this.deltaY = this.startY - B.offsetTop;
      this.dragThreshMet = false;
      this.clickTimeout = setTimeout(function()
      {
        var E = Ext.dd.DDM;
        E.startDrag(E.startX, E.startY)
      }, this.clickTimeThresh)
    },startDrag:function(B, C)
    {
      clearTimeout(this.clickTimeout);
      if (this.dragCurrent)
      {
        this.dragCurrent.b4StartDrag(B, C);
        this.dragCurrent.startDrag(B, C)
      }
      this.dragThreshMet = true
    },handleMouseUp:function(B)
    {
      if (Ext.QuickTips)
      {
        Ext.QuickTips.enable()
      }
      if (!this.dragCurrent)
      {
        return
      }
      clearTimeout(this.clickTimeout);
      if (this.dragThreshMet)
      {
        this.fireEvents(B, true)
      } else
      {
      }
      this.stopDrag(B);
      this.stopEvent(B)
    },stopEvent:function(B)
    {
      if (this.stopPropagation)
      {
        B.stopPropagation()
      }
      if (this.preventDefault)
      {
        B.preventDefault()
      }
    },stopDrag:function(B)
    {
      if (this.dragCurrent)
      {
        if (this.dragThreshMet)
        {
          this.dragCurrent.b4EndDrag(B);
          this.dragCurrent.endDrag(B)
        }
        this.dragCurrent.onMouseUp(B)
      }
      this.dragCurrent = null;
      this.dragOvers = {}
    },handleMouseMove:function(D)
    {
      if (!this.dragCurrent)
      {
        return true
      }
      if (Ext.isIE && (D.button !== 0 && D.button !== 1 && D.button !== 2))
      {
        this.stopEvent(D);
        return this.handleMouseUp(D)
      }
      if (!this.dragThreshMet)
      {
        var C = Math.abs(this.startX - D.getPageX());
        var B = Math.abs(this.startY - D.getPageY());
        if (C > this.clickPixelThresh || B > this.clickPixelThresh)
        {
          this.startDrag(this.startX, this.startY)
        }
      }
      if (this.dragThreshMet)
      {
        this.dragCurrent.b4Drag(D);
        this.dragCurrent.onDrag(D);
        if (!this.dragCurrent.moveOnly)
        {
          this.fireEvents(D, false)
        }
      }
      this.stopEvent(D);
      return true
    },fireEvents:function(K, L)
    {
      var N = this.dragCurrent;
      if (!N || N.isLocked())
      {
        return
      }
      var O = K.getPoint();
      var B = [];
      var E = [];
      var I = [];
      var G = [];
      var D = [];
      for (var F in this.dragOvers)
      {
        var C = this.dragOvers[F];
        if (!this.isTypeOfDD(C))
        {
          continue
        }
        if (!this.isOverTarget(O, C, this.mode))
        {
          E.push(C)
        }
        B[F] = true;
        delete this.dragOvers[F]
      }
      for (var M in N.groups)
      {
        if ("string" != typeof M)
        {
          continue
        }
        for (F in this.ids[M])
        {
          var H = this.ids[M][F];
          if (!this.isTypeOfDD(H))
          {
            continue
          }
          if (H.isTarget && !H.isLocked() && H != N)
          {
            if (this.isOverTarget(O, H, this.mode))
            {
              if (L)
              {
                G.push(H)
              } else
              {
                if (!B[H.id])
                {
                  D.push(H)
                } else
                {
                  I.push(H)
                }
                this.dragOvers[H.id] = H
              }
            }
          }
        }
      }
      if (this.mode)
      {
        if (E.length)
        {
          N.b4DragOut(K, E);
          N.onDragOut(K, E)
        }
        if (D.length)
        {
          N.onDragEnter(K, D)
        }
        if (I.length)
        {
          N.b4DragOver(K, I);
          N.onDragOver(K, I)
        }
        if (G.length)
        {
          N.b4DragDrop(K, G);
          N.onDragDrop(K, G)
        }
      } else
      {
        var J = 0;
        for (F = 0,J = E.length; F < J; ++F)
        {
          N.b4DragOut(K, E[F].id);
          N.onDragOut(K, E[F].id)
        }
        for (F = 0,J = D.length; F < J; ++F)
        {
          N.onDragEnter(K, D[F].id)
        }
        for (F = 0,J = I.length; F < J; ++F)
        {
          N.b4DragOver(K, I[F].id);
          N.onDragOver(K, I[F].id)
        }
        for (F = 0,J = G.length; F < J; ++F)
        {
          N.b4DragDrop(K, G[F].id);
          N.onDragDrop(K, G[F].id)
        }
      }
      if (L && !G.length)
      {
        N.onInvalidDrop(K)
      }
    },getBestMatch:function(D)
    {
      var F = null;
      var C = D.length;
      if (C == 1)
      {
        F = D[0]
      } else
      {
        for (var E = 0; E < C; ++E)
        {
          var B = D[E];
          if (B.cursorIsOver)
          {
            F = B;
            break
          } else
          {
            if (!F || F.overlap.getArea() < B.overlap.getArea())
            {
              F = B
            }
          }
        }
      }
      return F
    },refreshCache:function(C)
    {
      for (var B in C)
      {
        if ("string" != typeof B)
        {
          continue
        }
        for (var D in this.ids[B])
        {
          var E = this.ids[B][D];
          if (this.isTypeOfDD(E))
          {
            var F = this.getLocation(E);
            if (F)
            {
              this.locationCache[E.id] = F
            } else
            {
              delete this.locationCache[E.id]
            }
          }
        }
      }
    },verifyEl:function(C)
    {
      if (C)
      {
        var B;
        if (Ext.isIE)
        {
          try
          {
            B = C.offsetParent
          } catch(D)
          {
          }
        } else
        {
          B = C.offsetParent
        }
        if (B)
        {
          return true
        }
      }
      return false
    },getLocation:function(G)
    {
      if (!this.isTypeOfDD(G))
      {
        return null
      }
      var E = G.getEl(),J,D,C,L,K,M,B,I,F;
      try
      {
        J = Ext.lib.Dom.getXY(E)
      } catch(H)
      {
      }
      if (!J)
      {
        return null
      }
      D = J[0];
      C = D + E.offsetWidth;
      L = J[1];
      K = L + E.offsetHeight;
      M = L - G.padding[0];
      B = C + G.padding[1];
      I = K + G.padding[2];
      F = D - G.padding[3];
      return new Ext.lib.Region(M, B, I, F)
    },isOverTarget:function(J, B, D)
    {
      var F = this.locationCache[B.id];
      if (!F || !this.useCache)
      {
        F = this.getLocation(B);
        this.locationCache[B.id] = F
      }
      if (!F)
      {
        return false
      }
      B.cursorIsOver = F.contains(J);
      var I = this.dragCurrent;
      if (!I || !I.getTargetCoord || (!D && !I.constrainX && !I.constrainY))
      {
        return B.cursorIsOver
      }
      B.overlap = null;
      var G = I.getTargetCoord(J.x, J.y);
      var C = I.getDragEl();
      var E = new Ext.lib.Region(G.y, G.x + C.offsetWidth, G.y + C.offsetHeight, G.x);
      var H = E.intersect(F);
      if (H)
      {
        B.overlap = H;
        return(D) ? true : B.cursorIsOver
      } else
      {
        return false
      }
    },_onUnload:function(C, B)
    {
      Ext.dd.DragDropMgr.unregAll()
    },unregAll:function()
    {
      if (this.dragCurrent)
      {
        this.stopDrag();
        this.dragCurrent = null
      }
      this._execOnAll("unreg", []);
      for (i in this.elementCache)
      {
        delete this.elementCache[i]
      }
      this.elementCache = {};
      this.ids = {}
    },elementCache:{},getElWrapper:function(C)
    {
      var B = this.elementCache[C];
      if (!B || !B.el)
      {
        B = this.elementCache[C] = new this.ElementWrapper(Ext.getDom(C))
      }
      return B
    },getElement:function(B)
    {
      return Ext.getDom(B)
    },getCss:function(C)
    {
      var B = Ext.getDom(C);
      return(B) ? B.style : null
    },ElementWrapper:function(B)
    {
      this.el = B || null;
      this.id = this.el && B.id;
      this.css = this.el && B.style
    },getPosX:function(B)
    {
      return Ext.lib.Dom.getX(B)
    },getPosY:function(B)
    {
      return Ext.lib.Dom.getY(B)
    },swapNode:function(D, B)
    {
      if (D.swapNode)
      {
        D.swapNode(B)
      } else
      {
        var E = B.parentNode;
        var C = B.nextSibling;
        if (C == D)
        {
          E.insertBefore(D, B)
        } else
        {
          if (B == D.nextSibling)
          {
            E.insertBefore(B, D)
          } else
          {
            D.parentNode.replaceChild(B, D);
            E.insertBefore(D, C)
          }
        }
      }
    },getScroll:function()
    {
      var D,B,E = document.documentElement,C = document.body;
      if (E && (E.scrollTop || E.scrollLeft))
      {
        D = E.scrollTop;
        B = E.scrollLeft
      } else
      {
        if (C)
        {
          D = C.scrollTop;
          B = C.scrollLeft
        } else
        {
        }
      }
      return{top:D,left:B}
    },getStyle:function(C, B)
    {
      return Ext.fly(C).getStyle(B)
    },getScrollTop:function()
    {
      return this.getScroll().top
    },getScrollLeft:function()
    {
      return this.getScroll().left
    },moveToEl:function(B, D)
    {
      var C = Ext.lib.Dom.getXY(D);
      Ext.lib.Dom.setXY(B, C)
    },numericSort:function(C, B)
    {
      return(C - B)
    },_timeoutCount:0,_addListeners:function()
    {
      var B = Ext.dd.DDM;
      if (Ext.lib.Event && document)
      {
        B._onLoad()
      } else
      {
        if (B._timeoutCount > 2000)
        {
        } else
        {
          setTimeout(B._addListeners, 10);
          if (document && document.body)
          {
            B._timeoutCount += 1
          }
        }
      }
    },handleWasClicked:function(B, D)
    {
      if (this.isHandle(D, B.id))
      {
        return true
      } else
      {
        var C = B.parentNode;
        while (C)
        {
          if (this.isHandle(D, C.id))
          {
            return true
          } else
          {
            C = C.parentNode
          }
        }
      }
      return false
    }}
  }();
  Ext.dd.DDM = Ext.dd.DragDropMgr;
  Ext.dd.DDM._addListeners()
}
Ext.dd.DD = function(C, A, B)
{
  if (C)
  {
    this.init(C, A, B)
  }
};
Ext.extend(Ext.dd.DD, Ext.dd.DragDrop, {scroll:true,autoOffset:function(C, B)
{
  var A = C - this.startPageX;
  var D = B - this.startPageY;
  this.setDelta(A, D)
},setDelta:function(B, A)
{
  this.deltaX = B;
  this.deltaY = A
},setDragElPos:function(C, B)
{
  var A = this.getDragEl();
  this.alignElWithMouse(A, C, B)
},alignElWithMouse:function(C, G, F)
{
  var E = this.getTargetCoord(G, F);
  var B = C.dom ? C : Ext.fly(C);
  if (!this.deltaSetXY)
  {
    var H = [E.x,E.y];
    B.setXY(H);
    var D = B.getLeft(true);
    var A = B.getTop(true);
    this.deltaSetXY = [D - E.x,A - E.y]
  } else
  {
    B.setLeftTop(E.x + this.deltaSetXY[0], E.y + this.deltaSetXY[1])
  }
  this.cachePosition(E.x, E.y);
  this.autoScroll(E.x, E.y, C.offsetHeight, C.offsetWidth);
  return E
},cachePosition:function(B, A)
{
  if (B)
  {
    this.lastPageX = B;
    this.lastPageY = A
  } else
  {
    var C = Ext.lib.Dom.getXY(this.getEl());
    this.lastPageX = C[0];
    this.lastPageY = C[1]
  }
},autoScroll:function(J, I, E, K)
{
  if (this.scroll)
  {
    var L = Ext.lib.Dom.getViewWidth();
    var B = Ext.lib.Dom.getViewHeight();
    var N = this.DDM.getScrollTop();
    var D = this.DDM.getScrollLeft();
    var H = E + I;
    var M = K + J;
    var G = (L + N - I - this.deltaY);
    var F = (B + D - J - this.deltaX);
    var C = 40;
    var A = (document.all) ? 80 : 30;
    if (H > L && G < C)
    {
      window.scrollTo(D, N + A)
    }
    if (I < N && N > 0 && I - N < C)
    {
      window.scrollTo(D, N - A)
    }
    if (M > B && F < C)
    {
      window.scrollTo(D + A, N)
    }
    if (J < D && D > 0 && J - D < C)
    {
      window.scrollTo(D - A, N)
    }
  }
},getTargetCoord:function(C, B)
{
  var A = C - this.deltaX;
  var D = B - this.deltaY;
  if (this.constrainX)
  {
    if (A < this.minX)
    {
      A = this.minX
    }
    if (A > this.maxX)
    {
      A = this.maxX
    }
  }
  if (this.constrainY)
  {
    if (D < this.minY)
    {
      D = this.minY
    }
    if (D > this.maxY)
    {
      D = this.maxY
    }
  }
  A = this.getTick(A, this.xTicks);
  D = this.getTick(D, this.yTicks);
  return{x:A,y:D}
},applyConfig:function()
{
  Ext.dd.DD.superclass.applyConfig.call(this);
  this.scroll = (this.config.scroll !== false)
},b4MouseDown:function(A)
{
  this.autoOffset(A.getPageX(), A.getPageY())
},b4Drag:function(A)
{
  this.setDragElPos(A.getPageX(), A.getPageY())
},toString:function()
{
  return("DD " + this.id)
}});
Ext.dd.DDProxy = function(C, A, B)
{
  if (C)
  {
    this.init(C, A, B);
    this.initFrame()
  }
};
Ext.dd.DDProxy.dragElId = "ygddfdiv";
Ext.extend(Ext.dd.DDProxy, Ext.dd.DD, {resizeFrame:true,centerFrame:false,createFrame:function()
{
  var B = this;
  var A = document.body;
  if (!A || !A.firstChild)
  {
    setTimeout(function()
    {
      B.createFrame()
    }, 50);
    return
  }
  var D = this.getDragEl();
  if (!D)
  {
    D = document.createElement("div");
    D.id = this.dragElId;
    var C = D.style;
    C.position = "absolute";
    C.visibility = "hidden";
    C.cursor = "move";
    C.border = "2px solid #aaa";
    C.zIndex = 999;
    A.insertBefore(D, A.firstChild)
  }
},initFrame:function()
{
  this.createFrame()
},applyConfig:function()
{
  Ext.dd.DDProxy.superclass.applyConfig.call(this);
  this.resizeFrame = (this.config.resizeFrame !== false);
  this.centerFrame = (this.config.centerFrame);
  this.setDragElId(this.config.dragElId || Ext.dd.DDProxy.dragElId)
},showFrame:function(E, D)
{
  var C = this.getEl();
  var A = this.getDragEl();
  var B = A.style;
  this._resizeProxy();
  if (this.centerFrame)
  {
    this.setDelta(Math.round(parseInt(B.width, 10) / 2), Math.round(parseInt(B.height, 10) / 2))
  }
  this.setDragElPos(E, D);
  Ext.fly(A).show()
},_resizeProxy:function()
{
  if (this.resizeFrame)
  {
    var A = this.getEl();
    Ext.fly(this.getDragEl()).setSize(A.offsetWidth, A.offsetHeight)
  }
},b4MouseDown:function(B)
{
  var A = B.getPageX();
  var C = B.getPageY();
  this.autoOffset(A, C);
  this.setDragElPos(A, C)
},b4StartDrag:function(A, B)
{
  this.showFrame(A, B)
},b4EndDrag:function(A)
{
  Ext.fly(this.getDragEl()).hide()
},endDrag:function(C)
{
  var B = this.getEl();
  var A = this.getDragEl();
  A.style.visibility = "";
  this.beforeMove();
  B.style.visibility = "hidden";
  Ext.dd.DDM.moveToEl(B, A);
  A.style.visibility = "hidden";
  B.style.visibility = "";
  this.afterDrag()
},beforeMove:function()
{
},afterDrag:function()
{
},toString:function()
{
  return("DDProxy " + this.id)
}});
Ext.dd.DDTarget = function(C, A, B)
{
  if (C)
  {
    this.initTarget(C, A, B)
  }
};
Ext.extend(Ext.dd.DDTarget, Ext.dd.DragDrop, {toString:function()
{
  return("DDTarget " + this.id)
}});
Ext.dd.ScrollManager = function()
{
  var C = Ext.dd.DragDropMgr;
  var E = {};
  var B = null;
  var H = {};
  var G = function(K)
  {
    B = null;
    A()
  };
  var I = function()
  {
    if (C.dragCurrent)
    {
      C.refreshCache(C.dragCurrent.groups)
    }
  };
  var D = function()
  {
    if (C.dragCurrent)
    {
      var K = Ext.dd.ScrollManager;
      if (!K.animate)
      {
        if (H.el.scroll(H.dir, K.increment))
        {
          I()
        }
      } else
      {
        H.el.scroll(H.dir, K.increment, true, K.animDuration, I)
      }
    }
  };
  var A = function()
  {
    if (H.id)
    {
      clearInterval(H.id)
    }
    H.id = 0;
    H.el = null;
    H.dir = ""
  };
  var F = function(L, K)
  {
    A();
    H.el = L;
    H.dir = K;
    H.id = setInterval(D, Ext.dd.ScrollManager.frequency)
  };
  var J = function(Q, L)
  {
    if (L || !C.dragCurrent)
    {
      return
    }
    var K = Ext.dd.ScrollManager;
    if (!B || B != C.dragCurrent)
    {
      B = C.dragCurrent;
      K.refreshCache()
    }
    var P = Ext.lib.Event.getXY(Q);
    var O = new Ext.lib.Point(P[0], P[1]);
    for (var R in E)
    {
      var M = E[R],N = M._region;
      if (N && N.contains(O) && M.isScrollable())
      {
        if (N.bottom - O.y <= K.thresh)
        {
          if (H.el != M)
          {
            F(M, "down")
          }
          return
        } else
        {
          if (N.right - O.x <= K.thresh)
          {
            if (H.el != M)
            {
              F(M, "left")
            }
            return
          } else
          {
            if (O.y - N.top <= K.thresh)
            {
              if (H.el != M)
              {
                F(M, "up")
              }
              return
            } else
            {
              if (O.x - N.left <= K.thresh)
              {
                if (H.el != M)
                {
                  F(M, "right")
                }
                return
              }
            }
          }
        }
      }
    }
    A()
  };
  C.fireEvents = C.fireEvents.createSequence(J, C);
  C.stopDrag = C.stopDrag.createSequence(G, C);
  return{register:function(M)
  {
    if (M instanceof Array)
    {
      for (var L = 0,K = M.length; L < K; L++)
      {
        this.register(M[L])
      }
    } else
    {
      M = Ext.get(M);
      E[M.id] = M
    }
  },unregister:function(M)
  {
    if (M instanceof Array)
    {
      for (var L = 0,K = M.length; L < K; L++)
      {
        this.unregister(M[L])
      }
    } else
    {
      M = Ext.get(M);
      delete E[M.id]
    }
  },thresh:25,increment:100,frequency:500,animate:true,animDuration:0.4,refreshCache:function()
  {
    for (var K in E)
    {
      if (typeof E[K] == "object")
      {
        E[K]._region = E[K].getRegion()
      }
    }
  }}
}();
Ext.dd.Registry = function()
{
  var D = {};
  var B = {};
  var A = 0;
  var C = function(F, E)
  {
    if (typeof F == "string")
    {
      return F
    }
    var G = F.id;
    if (!G && E !== false)
    {
      G = "extdd-" + (++A);
      F.id = G
    }
    return G
  };
  return{register:function(H, I)
  {
    I = I || {};
    if (typeof H == "string")
    {
      H = document.getElementById(H)
    }
    I.ddel = H;
    D[C(H)] = I;
    if (I.isHandle !== false)
    {
      B[I.ddel.id] = I
    }
    if (I.handles)
    {
      var G = I.handles;
      for (var F = 0,E = G.length; F < E; F++)
      {
        B[C(G[F])] = I
      }
    }
  },unregister:function(H)
  {
    var J = C(H, false);
    var I = D[J];
    if (I)
    {
      delete D[J];
      if (I.handles)
      {
        var G = I.handles;
        for (var F = 0,E = G.length; F < E; F++)
        {
          delete B[C(G[F], false)]
        }
      }
    }
  },getHandle:function(E)
  {
    if (typeof E != "string")
    {
      E = E.id
    }
    return B[E]
  },getHandleFromEvent:function(F)
  {
    var E = Ext.lib.Event.getTarget(F);
    return E ? B[E.id] : null
  },getTarget:function(E)
  {
    if (typeof E != "string")
    {
      E = E.id
    }
    return D[E]
  },getTargetFromEvent:function(F)
  {
    var E = Ext.lib.Event.getTarget(F);
    return E ? D[E.id] || B[E.id] : null
  }}
}();
Ext.dd.StatusProxy = function(A)
{
  Ext.apply(this, A);
  this.id = this.id || Ext.id();
  this.el = new Ext.Layer({dh:{id:this.id,tag:"div",cls:"x-dd-drag-proxy " + this.dropNotAllowed,children:[{tag:"div",cls:"x-dd-drop-icon"},{tag:"div",cls:"x-dd-drag-ghost"}]},shadow:!A || A.shadow !== false});
  this.ghost = Ext.get(this.el.dom.childNodes[1]);
  this.dropStatus = this.dropNotAllowed
};
Ext.dd.StatusProxy.prototype = {dropAllowed:"x-dd-drop-ok",dropNotAllowed:"x-dd-drop-nodrop",setStatus:function(A)
{
  A = A || this.dropNotAllowed;
  if (this.dropStatus != A)
  {
    this.el.replaceClass(this.dropStatus, A);
    this.dropStatus = A
  }
},reset:function(A)
{
  this.el.dom.className = "x-dd-drag-proxy " + this.dropNotAllowed;
  this.dropStatus = this.dropNotAllowed;
  if (A)
  {
    this.ghost.update("")
  }
},update:function(A)
{
  if (typeof A == "string")
  {
    this.ghost.update(A)
  } else
  {
    this.ghost.update("");
    A.style.margin = "0";
    this.ghost.dom.appendChild(A)
  }
},getEl:function()
{
  return this.el
},getGhost:function()
{
  return this.ghost
},hide:function(A)
{
  this.el.hide();
  if (A)
  {
    this.reset(true)
  }
},stop:function()
{
  if (this.anim && this.anim.isAnimated && this.anim.isAnimated())
  {
    this.anim.stop()
  }
},show:function()
{
  this.el.show()
},sync:function()
{
  this.el.sync()
},repair:function(B, C, A)
{
  this.callback = C;
  this.scope = A;
  if (B && this.animRepair !== false)
  {
    this.el.addClass("x-dd-drag-repair");
    this.el.hideUnders(true);
    this.anim = this.el.shift({duration:this.repairDuration || 0.5,easing:"easeOut",xy:B,stopFx:true,callback:this.afterRepair,scope:this})
  } else
  {
    this.afterRepair()
  }
},afterRepair:function()
{
  this.hide(true);
  if (typeof this.callback == "function")
  {
    this.callback.call(this.scope || this)
  }
  this.callback = null;
  this.scope = null
}};
Ext.dd.DragSource = function(B, A)
{
  this.el = Ext.get(B);
  this.dragData = {};
  Ext.apply(this, A);
  if (!this.proxy)
  {
    this.proxy = new Ext.dd.StatusProxy()
  }
  Ext.dd.DragSource.superclass.constructor.call(this, this.el.dom, this.ddGroup || this.group, {dragElId:this.proxy.id,resizeFrame:false,isTarget:false,scroll:this.scroll === true});
  this.dragging = false
};
Ext.extend(Ext.dd.DragSource, Ext.dd.DDProxy, {dropAllowed:"x-dd-drop-ok",dropNotAllowed:"x-dd-drop-nodrop",getDragData:function(A)
{
  return this.dragData
},onDragEnter:function(C, D)
{
  var B = Ext.dd.DragDropMgr.getDDById(D);
  this.cachedTarget = B;
  if (this.beforeDragEnter(B, C, D) !== false)
  {
    if (B.isNotifyTarget)
    {
      var A = B.notifyEnter(this, C, this.dragData);
      this.proxy.setStatus(A)
    } else
    {
      this.proxy.setStatus(this.dropAllowed)
    }
    if (this.afterDragEnter)
    {
      this.afterDragEnter(B, C, D)
    }
  }
},beforeDragEnter:function(B, A, C)
{
  return true
},alignElWithMouse:function()
{
  Ext.dd.DragSource.superclass.alignElWithMouse.apply(this, arguments);
  this.proxy.sync()
},onDragOver:function(C, D)
{
  var B = this.cachedTarget || Ext.dd.DragDropMgr.getDDById(D);
  if (this.beforeDragOver(B, C, D) !== false)
  {
    if (B.isNotifyTarget)
    {
      var A = B.notifyOver(this, C, this.dragData);
      this.proxy.setStatus(A)
    }
    if (this.afterDragOver)
    {
      this.afterDragOver(B, C, D)
    }
  }
},beforeDragOver:function(B, A, C)
{
  return true
},onDragOut:function(B, C)
{
  var A = this.cachedTarget || Ext.dd.DragDropMgr.getDDById(C);
  if (this.beforeDragOut(A, B, C) !== false)
  {
    if (A.isNotifyTarget)
    {
      A.notifyOut(this, B, this.dragData)
    }
    this.proxy.reset();
    if (this.afterDragOut)
    {
      this.afterDragOut(A, B, C)
    }
  }
  this.cachedTarget = null
},beforeDragOut:function(B, A, C)
{
  return true
},onDragDrop:function(B, C)
{
  var A = this.cachedTarget || Ext.dd.DragDropMgr.getDDById(C);
  if (this.beforeDragDrop(A, B, C) !== false)
  {
    if (A.isNotifyTarget)
    {
      if (A.notifyDrop(this, B, this.dragData))
      {
        this.onValidDrop(A, B, C)
      } else
      {
        this.onInvalidDrop(A, B, C)
      }
    } else
    {
      this.onValidDrop(A, B, C)
    }
    if (this.afterDragDrop)
    {
      this.afterDragDrop(A, B, C)
    }
  }
  delete this.cachedTarget
},beforeDragDrop:function(B, A, C)
{
  return true
},onValidDrop:function(B, A, C)
{
  this.hideProxy();
  if (this.afterValidDrop)
  {
    this.afterValidDrop(B, A, C)
  }
},getRepairXY:function(B, A)
{
  return this.el.getXY()
},onInvalidDrop:function(B, A, C)
{
  this.beforeInvalidDrop(B, A, C);
  if (this.cachedTarget)
  {
    if (this.cachedTarget.isNotifyTarget)
    {
      this.cachedTarget.notifyOut(this, A, this.dragData)
    }
    this.cacheTarget = null
  }
  this.proxy.repair(this.getRepairXY(A, this.dragData), this.afterRepair, this);
  if (this.afterInvalidDrop)
  {
    this.afterInvalidDrop(A, C)
  }
},afterRepair:function()
{
  if (Ext.enableFx)
  {
    this.el.highlight(this.hlColor || "c3daf9")
  }
  this.dragging = false
},beforeInvalidDrop:function(B, A, C)
{
  return true
},handleMouseDown:function(B)
{
  if (this.dragging)
  {
    return
  }
  var A = this.getDragData(B);
  if (A && this.onBeforeDrag(A, B) !== false)
  {
    this.dragData = A;
    this.proxy.stop();
    Ext.dd.DragSource.superclass.handleMouseDown.apply(this, arguments)
  }
},onBeforeDrag:function(A, B)
{
  return true
},onStartDrag:Ext.emptyFn,startDrag:function(A, B)
{
  this.proxy.reset();
  this.dragging = true;
  this.proxy.update("");
  this.onInitDrag(A, B);
  this.proxy.show()
},onInitDrag:function(A, C)
{
  var B = this.el.dom.cloneNode(true);
  B.id = Ext.id();
  this.proxy.update(B);
  this.onStartDrag(A, C);
  return true
},getProxy:function()
{
  return this.proxy
},hideProxy:function()
{
  this.proxy.hide();
  this.proxy.reset(true);
  this.dragging = false
},triggerCacheRefresh:function()
{
  Ext.dd.DDM.refreshCache(this.groups)
},b4EndDrag:function(A)
{
},endDrag:function(A)
{
  this.onEndDrag(this.dragData, A)
},onEndDrag:function(A, B)
{
},autoOffset:function(A, B)
{
  this.setDelta(-12, -20)
}});
Ext.dd.DropTarget = function(B, A)
{
  this.el = Ext.get(B);
  Ext.apply(this, A);
  if (this.containerScroll)
  {
    Ext.dd.ScrollManager.register(this.el)
  }
  Ext.dd.DropTarget.superclass.constructor.call(this, this.el.dom, this.ddGroup || this.group, {isTarget:true})
};
Ext.extend(Ext.dd.DropTarget, Ext.dd.DDTarget, {dropAllowed:"x-dd-drop-ok",dropNotAllowed:"x-dd-drop-nodrop",isTarget:true,isNotifyTarget:true,notifyEnter:function(A, C, B)
{
  if (this.overClass)
  {
    this.el.addClass(this.overClass)
  }
  return this.dropAllowed
},notifyOver:function(A, C, B)
{
  return this.dropAllowed
},notifyOut:function(A, C, B)
{
  if (this.overClass)
  {
    this.el.removeClass(this.overClass)
  }
},notifyDrop:function(A, C, B)
{
  return false
}});
Ext.dd.DragZone = function(B, A)
{
  Ext.dd.DragZone.superclass.constructor.call(this, B, A);
  if (this.containerScroll)
  {
    Ext.dd.ScrollManager.register(this.el)
  }
};
Ext.extend(Ext.dd.DragZone, Ext.dd.DragSource, {getDragData:function(A)
{
  return Ext.dd.Registry.getHandleFromEvent(A)
},onInitDrag:function(A, B)
{
  this.proxy.update(this.dragData.ddel.cloneNode(true));
  this.onStartDrag(A, B);
  return true
},afterRepair:function()
{
  if (Ext.enableFx)
  {
    Ext.Element.fly(this.dragData.ddel).highlight(this.hlColor || "c3daf9")
  }
  this.dragging = false
},getRepairXY:function(A)
{
  return Ext.Element.fly(this.dragData.ddel).getXY()
}});
Ext.dd.DropZone = function(B, A)
{
  Ext.dd.DropZone.superclass.constructor.call(this, B, A)
};
Ext.extend(Ext.dd.DropZone, Ext.dd.DropTarget, {getTargetFromEvent:function(A)
{
  return Ext.dd.Registry.getTargetFromEvent(A)
},onNodeEnter:function(D, A, C, B)
{
},onNodeOver:function(D, A, C, B)
{
  return this.dropAllowed
},onNodeOut:function(D, A, C, B)
{
},onNodeDrop:function(D, A, C, B)
{
  return false
},onContainerOver:function(A, C, B)
{
  return this.dropNotAllowed
},onContainerDrop:function(A, C, B)
{
  return false
},notifyEnter:function(A, C, B)
{
  return this.dropNotAllowed
},notifyOver:function(A, C, B)
{
  var D = this.getTargetFromEvent(C);
  if (!D)
  {
    if (this.lastOverNode)
    {
      this.onNodeOut(this.lastOverNode, A, C, B);
      this.lastOverNode = null
    }
    return this.onContainerOver(A, C, B)
  }
  if (this.lastOverNode != D)
  {
    if (this.lastOverNode)
    {
      this.onNodeOut(this.lastOverNode, A, C, B)
    }
    this.onNodeEnter(D, A, C, B);
    this.lastOverNode = D
  }
  return this.onNodeOver(D, A, C, B)
},notifyOut:function(A, C, B)
{
  if (this.lastOverNode)
  {
    this.onNodeOut(this.lastOverNode, A, C, B);
    this.lastOverNode = null
  }
},notifyDrop:function(A, C, B)
{
  if (this.lastOverNode)
  {
    this.onNodeOut(this.lastOverNode, A, C, B);
    this.lastOverNode = null
  }
  var D = this.getTargetFromEvent(C);
  return D ? this.onNodeDrop(D, A, C, B) : this.onContainerDrop(A, C, B)
},triggerCacheRefresh:function()
{
  Ext.dd.DDM.refreshCache(this.groups)
}});
Ext.data.SortTypes = {none:function(A)
{
  return A
},stripTagsRE:/<\/?[^>]+>/gi,asText:function(A)
{
  return String(A).replace(this.stripTagsRE, "")
},asUCText:function(A)
{
  return String(A).toUpperCase().replace(this.stripTagsRE, "")
},asUCString:function(A)
{
  return String(A).toUpperCase()
},asDate:function(A)
{
  if (!A)
  {
    return 0
  }
  if (A instanceof Date)
  {
    return A.getTime()
  }
  return Date.parse(String(A))
},asFloat:function(A)
{
  var B = parseFloat(String(A).replace(/,/g, ""));
  if (isNaN(B))
  {
    B = 0
  }
  return B
},asInt:function(A)
{
  var B = parseInt(String(A).replace(/,/g, ""));
  if (isNaN(B))
  {
    B = 0
  }
  return B
}};
Ext.data.Record = function(A, B)
{
  this.id = (B || B === 0) ? B : ++Ext.data.Record.AUTO_ID;
  this.data = A
};
Ext.data.Record.create = function(E)
{
  var C = function()
  {
    C.superclass.constructor.apply(this, arguments)
  };
  Ext.extend(C, Ext.data.Record);
  var D = C.prototype;
  D.fields = new Ext.util.MixedCollection(false, function(F)
  {
    return F.name
  });
  for (var B = 0,A = E.length; B < A; B++)
  {
    D.fields.add(new Ext.data.Field(E[B]))
  }
  C.getField = function(F)
  {
    return D.fields.get(F)
  };
  return C
};
Ext.data.Record.AUTO_ID = 1000;
Ext.data.Record.EDIT = "edit";
Ext.data.Record.REJECT = "reject";
Ext.data.Record.COMMIT = "commit";
Ext.data.Record.prototype = {dirty:false,editing:false,error:null,modified:null,join:function(A)
{
  this.store = A
},set:function(A, B)
{
  if (this.data[A] == B)
  {
    return
  }
  this.dirty = true;
  if (!this.modified)
  {
    this.modified = {}
  }
  if (typeof this.modified[A] == "undefined")
  {
    this.modified[A] = this.data[A]
  }
  this.data[A] = B;
  if (!this.editing)
  {
    this.store.afterEdit(this)
  }
},get:function(A)
{
  return this.data[A]
},beginEdit:function()
{
  this.editing = true;
  this.modified = {}
},cancelEdit:function()
{
  this.editing = false;
  delete this.modified
},endEdit:function()
{
  this.editing = false;
  if (this.dirty && this.store)
  {
    this.store.afterEdit(this)
  }
},reject:function()
{
  var A = this.modified;
  for (var B in A)
  {
    if (typeof A[B] != "function")
    {
      this.data[B] = A[B]
    }
  }
  this.dirty = false;
  delete this.modified;
  this.editing = false;
  if (this.store)
  {
    this.store.afterReject(this)
  }
},commit:function()
{
  this.dirty = false;
  delete this.modified;
  this.editing = false;
  if (this.store)
  {
    this.store.afterCommit(this)
  }
},hasError:function()
{
  return this.error != null
},clearError:function()
{
  this.error = null
},copy:function(A)
{
  return new this.constructor(Ext.apply({}, this.data), A || this.id)
}};
Ext.data.Store = function(A)
{
  this.data = new Ext.util.MixedCollection(false);
  this.data.getKey = function(B)
  {
    return B.id
  };
  this.baseParams = {};
  this.paramNames = {"start":"start","limit":"limit","sort":"sort","dir":"dir"};
  if (A && A.data)
  {
    this.inlineData = A.data;
    delete A.data
  }
  Ext.apply(this, A);
  if (this.reader)
  {
    if (!this.recordType)
    {
      this.recordType = this.reader.recordType
    }
    if (this.reader.onMetaChange)
    {
      this.reader.onMetaChange = this.onMetaChange.createDelegate(this)
    }
  }
  if (this.recordType)
  {
    this.fields = this.recordType.prototype.fields
  }
  this.modified = [];
  this.addEvents({datachanged:true,metachange:true,add:true,remove:true,update:true,clear:true,beforeload:true,load:true,loadexception:true});
  if (this.proxy)
  {
    this.relayEvents(this.proxy, ["loadexception"])
  }
  this.sortToggle = {};
  Ext.data.Store.superclass.constructor.call(this);
  if (this.inlineData)
  {
    this.loadData(this.inlineData);
    delete this.inlineData
  }
};
Ext.extend(Ext.data.Store, Ext.util.Observable, {remoteSort:false,pruneModifiedRecords:false,lastOptions:null,add:function(B)
{
  B = [].concat(B);
  for (var D = 0,A = B.length; D < A; D++)
  {
    B[D].join(this)
  }
  var C = this.data.length;
  this.data.addAll(B);
  this.fireEvent("add", this, B, C)
},remove:function(A)
{
  var B = this.data.indexOf(A);
  this.data.removeAt(B);
  if (this.pruneModifiedRecords)
  {
    this.modified.remove(A)
  }
  this.fireEvent("remove", this, A, B)
},removeAll:function()
{
  this.data.clear();
  if (this.pruneModifiedRecords)
  {
    this.modified = []
  }
  this.fireEvent("clear", this)
},insert:function(C, B)
{
  B = [].concat(B);
  for (var D = 0,A = B.length; D < A; D++)
  {
    this.data.insert(C, B[D]);
    B[D].join(this)
  }
  this.fireEvent("add", this, B, C)
},indexOf:function(A)
{
  return this.data.indexOf(A)
},indexOfId:function(A)
{
  return this.data.indexOfKey(A)
},getById:function(A)
{
  return this.data.key(A)
},getAt:function(A)
{
  return this.data.itemAt(A)
},getRange:function(B, A)
{
  return this.data.getRange(B, A)
},storeOptions:function(A)
{
  A = Ext.apply({}, A);
  delete A.callback;
  delete A.scope;
  this.lastOptions = A
},load:function(B)
{
  B = B || {};
  if (this.fireEvent("beforeload", this, B) !== false)
  {
    this.storeOptions(B);
    var C = Ext.apply(B.params || {}, this.baseParams);
    if (this.sortInfo && this.remoteSort)
    {
      var A = this.paramNames;
      C[A["sort"]] = this.sortInfo.field;
      C[A["dir"]] = this.sortInfo.direction
    }
    this.proxy.load(C, this.reader, this.loadRecords, this, B)
  }
},reload:function(A)
{
  this.load(Ext.applyIf(A || {}, this.lastOptions))
},loadRecords:function(G, B, F)
{
  if (!G || F === false)
  {
    if (F !== false)
    {
      this.fireEvent("load", this, [], B)
    }
    if (B.callback)
    {
      B.callback.call(B.scope || this, [], B, false)
    }
    return
  }
  var E = G.records,D = G.totalRecords || E.length;
  if (!B || B.add !== true)
  {
    if (this.pruneModifiedRecords)
    {
      this.modified = []
    }
    for (var C = 0,A = E.length; C < A; C++)
    {
      E[C].join(this)
    }
    if (this.snapshot)
    {
      this.data = this.snapshot;
      delete this.snapshot
    }
    this.data.clear();
    this.data.addAll(E);
    this.totalLength = D;
    this.applySort();
    this.fireEvent("datachanged", this)
  } else
  {
    this.totalLength = Math.max(D, this.data.length + E.length);
    this.add(E)
  }
  this.fireEvent("load", this, E, B);
  if (B.callback)
  {
    B.callback.call(B.scope || this, E, B, true)
  }
},loadData:function(C, A)
{
  var B = this.reader.readRecords(C);
  this.loadRecords(B, {add:A}, true)
},getCount:function()
{
  return this.data.length || 0
},getTotalCount:function()
{
  return this.totalLength || 0
},getSortState:function()
{
  return this.sortInfo
},applySort:function()
{
  if (this.sortInfo && !this.remoteSort)
  {
    var C = this.sortInfo,D = C.field;
    var A = this.fields.get(D).sortType;
    var B = function(F, E)
    {
      var H = A(F.data[D]),G = A(E.data[D]);
      return H > G ? 1 : (H < G ? -1 : 0)
    };
    this.data.sort(C.direction, B);
    if (this.snapshot && this.snapshot != this.data)
    {
      this.snapshot.sort(C.direction, B)
    }
  }
},setDefaultSort:function(B, A)
{
  this.sortInfo = {field:B,direction:A ? A.toUpperCase() : "ASC"}
},sort:function(C, A)
{
  var B = this.fields.get(C);
  if (!A)
  {
    if (this.sortInfo && this.sortInfo.field == B.name)
    {
      A = (this.sortToggle[B.name] || "ASC").toggle("ASC", "DESC")
    } else
    {
      A = B.sortDir
    }
  }
  this.sortToggle[B.name] = A;
  this.sortInfo = {field:B.name,direction:A};
  if (!this.remoteSort)
  {
    this.applySort();
    this.fireEvent("datachanged", this)
  } else
  {
    this.load(this.lastOptions)
  }
},each:function(B, A)
{
  this.data.each(B, A)
},getModifiedRecords:function()
{
  return this.modified
},createFilterFn:function(B, A, C)
{
  if (!A.exec)
  {
    A = String(A);
    if (A.length == 0)
    {
      return false
    }
    A = new RegExp((C === true ? "" : "^") + Ext.escapeRe(A), "i")
  }
  return function(D)
  {
    return A.test(D.data[B])
  }
},sum:function(E, F, A)
{
  var C = this.data.items,B = 0;
  F = F || 0;
  A = (A || A === 0) ? A : C.length - 1;
  for (var D = F; D <= A; D++)
  {
    B += (C[D].data[E] || 0)
  }
  return B
},filter:function(C, B, D)
{
  var A = this.createFilterFn(C, B, D);
  return A ? this.filterBy(A) : this.clearFilter()
},filterBy:function(B, A)
{
  this.snapshot = this.snapshot || this.data;
  this.data = this.queryBy(B, A || this);
  this.fireEvent("datachanged", this)
},query:function(C, B, D)
{
  var A = this.createFilterFn(C, B, D);
  return A ? this.queryBy(A) : this.data.clone()
},queryBy:function(B, A)
{
  var C = this.snapshot || this.data;
  return C.filterBy(B, A || this)
},collect:function(G, H, B)
{
  var F = (B === true && this.snapshot) ? this.snapshot.items : this.data.items;
  var I,J,A = [],C = {};
  for (var D = 0,E = F.length; D < E; D++)
  {
    I = F[D].data[G];
    J = String(I);
    if ((H || !Ext.isEmpty(I)) && !C[J])
    {
      C[J] = true;
      A[A.length] = I
    }
  }
  return A
},clearFilter:function(A)
{
  if (this.snapshot && this.snapshot != this.data)
  {
    this.data = this.snapshot;
    delete this.snapshot;
    if (A !== true)
    {
      this.fireEvent("datachanged", this)
    }
  }
},afterEdit:function(A)
{
  if (this.modified.indexOf(A) == -1)
  {
    this.modified.push(A)
  }
  this.fireEvent("update", this, A, Ext.data.Record.EDIT)
},afterReject:function(A)
{
  this.modified.remove(A);
  this.fireEvent("update", this, A, Ext.data.Record.REJECT)
},afterCommit:function(A)
{
  this.modified.remove(A);
  this.fireEvent("update", this, A, Ext.data.Record.COMMIT)
},commitChanges:function()
{
  var B = this.modified.slice(0);
  this.modified = [];
  for (var C = 0,A = B.length; C < A; C++)
  {
    B[C].commit()
  }
},rejectChanges:function()
{
  var B = this.modified.slice(0);
  this.modified = [];
  for (var C = 0,A = B.length; C < A; C++)
  {
    B[C].reject()
  }
},onMetaChange:function(B, A, C)
{
  this.recordType = A;
  this.fields = A.prototype.fields;
  delete this.snapshot;
  this.sortInfo = B.sortInfo;
  this.modified = [];
  this.fireEvent("metachange", this, this.reader.meta)
}});
Ext.data.SimpleStore = function(A)
{
  Ext.data.SimpleStore.superclass.constructor.call(this, {reader:new Ext.data.ArrayReader({id:A.id}, Ext.data.Record.create(A.fields)),proxy:new Ext.data.MemoryProxy(A.data)});
  this.load()
};
Ext.extend(Ext.data.SimpleStore, Ext.data.Store);
Ext.data.JsonStore = function(A)
{
  Ext.data.JsonStore.superclass.constructor.call(this, Ext.apply(A, {proxy:!A.data ? new Ext.data.HttpProxy({url:A.url}) : undefined,reader:new Ext.data.JsonReader(A, A.fields)}))
};
Ext.extend(Ext.data.JsonStore, Ext.data.Store);
Ext.data.Field = function(D)
{
  if (typeof D == "string")
  {
    D = {name:D}
  }
  Ext.apply(this, D);
  if (!this.type)
  {
    this.type = "auto"
  }
  var C = Ext.data.SortTypes;
  if (typeof this.sortType == "string")
  {
    this.sortType = C[this.sortType]
  }
  if (!this.sortType)
  {
    switch (this.type)
        {case"string":this.sortType = C.asUCString;break;case"date":this.sortType = C.asDate;break;default:this.sortType = C.none}
  }
  var E = /[\$,%]/g;
  if (!this.convert)
  {
    var B,A = this.dateFormat;
    switch (this.type)
        {case"":case"auto":case undefined:B = function(F)
    {
      return F
    };break;case"string":B = function(F)
    {
      return(F === undefined || F === null) ? "" : String(F)
    };break;case"int":B = function(F)
    {
      return F !== undefined && F !== null && F !== "" ? parseInt(String(F).replace(E, ""), 10) : ""
    };break;case"float":B = function(F)
    {
      return F !== undefined && F !== null && F !== "" ? parseFloat(String(F).replace(E, ""), 10) : ""
    };break;case"bool":case"boolean":B = function(F)
    {
      return F === true || F === "true" || F == 1
    };break;case"date":B = function(G)
    {
      if (!G)
      {
        return""
      }
      if (G instanceof Date)
      {
        return G
      }
      if (A)
      {
        if (A == "timestamp")
        {
          return new Date(G * 1000)
        }
        return Date.parseDate(G, A)
      }
      var F = Date.parse(G);
      return F ? new Date(F) : null
    };break}
    this.convert = B
  }
};
Ext.data.Field.prototype = {dateFormat:null,defaultValue:"",mapping:null,sortType:null,sortDir:"ASC"};
Ext.data.DataReader = function(A, B)
{
  this.meta = A;
  this.recordType = B instanceof Array ? Ext.data.Record.create(B) : B
};
Ext.data.DataReader.prototype = {};
Ext.data.DataProxy = function()
{
  this.addEvents({beforeload:true,load:true,loadexception:true});
  Ext.data.DataProxy.superclass.constructor.call(this)
};
Ext.extend(Ext.data.DataProxy, Ext.util.Observable);
Ext.data.MemoryProxy = function(A)
{
  Ext.data.MemoryProxy.superclass.constructor.call(this);
  this.data = A
};
Ext.extend(Ext.data.MemoryProxy, Ext.data.DataProxy, {load:function(F, C, G, D, B)
{
  F = F || {};
  var A;
  try
  {
    A = C.readRecords(this.data)
  } catch(E)
  {
    this.fireEvent("loadexception", this, B, null, E);
    G.call(D, null, B, false);
    return
  }
  G.call(D, A, B, true)
},update:function(B, A)
{
}});
Ext.data.HttpProxy = function(A)
{
  Ext.data.HttpProxy.superclass.constructor.call(this);
  this.conn = A;
  this.useAjax = !A || !A.events
};
Ext.extend(Ext.data.HttpProxy, Ext.data.DataProxy, {getConnection:function()
{
  return this.useAjax ? Ext.Ajax : this.conn
},load:function(E, B, F, C, A)
{
  if (this.fireEvent("beforeload", this, E) !== false)
  {
    var D = {params:E || {},request:{callback:F,scope:C,arg:A},reader:B,callback:this.loadResponse,scope:this};
    if (this.useAjax)
    {
      Ext.applyIf(D, this.conn);
      if (this.activeRequest)
      {
        Ext.Ajax.abort(this.activeRequest)
      }
      this.activeRequest = Ext.Ajax.request(D)
    } else
    {
      this.conn.request(D)
    }
  } else
  {
    F.call(C || this, null, A, false)
  }
},loadResponse:function(E, D, B)
{
  delete this.activeRequest;
  if (!D)
  {
    this.fireEvent("loadexception", this, E, B);
    E.request.callback.call(E.request.scope, null, E.request.arg, false);
    return
  }
  var A;
  try
  {
    A = E.reader.read(B)
  } catch(C)
  {
    this.fireEvent("loadexception", this, E, B, C);
    E.request.callback.call(E.request.scope, null, E.request.arg, false);
    return
  }
  this.fireEvent("load", this, E, E.request.arg);
  E.request.callback.call(E.request.scope, A, E.request.arg, true)
},update:function(A)
{
},updateResponse:function(A)
{
}});
Ext.data.ScriptTagProxy = function(A)
{
  Ext.data.ScriptTagProxy.superclass.constructor.call(this);
  Ext.apply(this, A);
  this.head = document.getElementsByTagName("head")[0]
};
Ext.data.ScriptTagProxy.TRANS_ID = 1000;
Ext.extend(Ext.data.ScriptTagProxy, Ext.data.DataProxy, {timeout:30000,callbackParam:"callback",nocache:true,load:function(E, F, H, I, J)
{
  if (this.fireEvent("beforeload", this, E) !== false)
  {
    var C = Ext.urlEncode(Ext.apply(E, this.extraParams));
    var B = this.url;
    B += (B.indexOf("?") != -1 ? "&" : "?") + C;
    if (this.nocache)
    {
      B += "&_dc=" + (new Date().getTime())
    }
    var A = ++Ext.data.ScriptTagProxy.TRANS_ID;
    var K = {id:A,cb:"stcCallback" + A,scriptId:"stcScript" + A,params:E,arg:J,url:B,callback:H,scope:I,reader:F};
    var D = this;
    window[K.cb] = function(L)
    {
      D.handleResponse(L, K)
    };
    B += String.format("&{0}={1}", this.callbackParam, K.cb);
    if (this.autoAbort !== false)
    {
      this.abort()
    }
    K.timeoutId = this.handleFailure.defer(this.timeout, this, [K]);
    var G = document.createElement("script");
    G.setAttribute("src", B);
    G.setAttribute("type", "text/javascript");
    G.setAttribute("id", K.scriptId);
    this.head.appendChild(G);
    this.trans = K
  } else
  {
    H.call(I || this, null, J, false)
  }
},isLoading:function()
{
  return this.trans ? true : false
},abort:function()
{
  if (this.isLoading())
  {
    this.destroyTrans(this.trans)
  }
},destroyTrans:function(B, A)
{
  this.head.removeChild(document.getElementById(B.scriptId));
  clearTimeout(B.timeoutId);
  if (A)
  {
    window[B.cb] = undefined;
    try
    {
      delete window[B.cb]
    } catch(C)
    {
    }
  } else
  {
    window[B.cb] = function()
    {
      window[B.cb] = undefined;
      try
      {
        delete window[B.cb]
      } catch(D)
      {
      }
    }
  }
},handleResponse:function(D, B)
{
  this.trans = false;
  this.destroyTrans(B, true);
  var A;
  try
  {
    A = B.reader.readRecords(D)
  } catch(C)
  {
    this.fireEvent("loadexception", this, D, B.arg, C);
    B.callback.call(B.scope || window, null, B.arg, false);
    return
  }
  this.fireEvent("load", this, D, B.arg);
  B.callback.call(B.scope || window, A, B.arg, true)
},handleFailure:function(A)
{
  this.trans = false;
  this.destroyTrans(A, false);
  this.fireEvent("loadexception", this, null, A.arg);
  A.callback.call(A.scope || window, null, A.arg, false)
}});
Ext.data.JsonReader = function(A, B)
{
  A = A || {};
  Ext.data.JsonReader.superclass.constructor.call(this, A, B || A.fields)
};
Ext.extend(Ext.data.JsonReader, Ext.data.DataReader, {read:function(response)
{
  var json = response.responseText;
  var o = eval("(" + json + ")");
  if (!o)
  {
    throw {message:"JsonReader.read: Json object not found"}
  }
  if (o.metaData)
  {
    delete this.ef;
    this.meta = o.metaData;
    this.recordType = Ext.data.Record.create(o.metaData.fields);
    this.onMetaChange(this.meta, this.recordType, o)
  }
  return this.readRecords(o)
},onMetaChange:function(A, C, B)
{
},simpleAccess:function(B, A)
{
  return B[A]
},getJsonAccessor:function()
{
  var A = /[\[\.]/;
  return function(C)
  {
    try
    {
      return(A.test(C)) ? new Function("obj", "return obj." + C) : function(D)
      {
        return D[C]
      }
    } catch(B)
    {
    }
    return Ext.emptyFn
  }
}(),readRecords:function(K)
{
  this.jsonData = K;
  var H = this.meta,A = this.recordType,R = A.prototype.fields,F = R.items,E = R.length;
  if (!this.ef)
  {
    if (H.totalProperty)
    {
      this.getTotal = this.getJsonAccessor(H.totalProperty)
    }
    if (H.successProperty)
    {
      this.getSuccess = this.getJsonAccessor(H.successProperty)
    }
    this.getRoot = H.root ? this.getJsonAccessor(H.root) : function(U)
    {
      return U
    };
    if (H.id)
    {
      var Q = this.getJsonAccessor(H.id);
      this.getId = function(V)
      {
        var U = Q(V);
        return(U === undefined || U === "") ? null : U
      }
    } else
    {
      this.getId = function()
      {
        return null
      }
    }
    this.ef = [];
    for (var O = 0; O < E; O++)
    {
      R = F[O];
      var T = (R.mapping !== undefined && R.mapping !== null) ? R.mapping : R.name;
      this.ef[O] = this.getJsonAccessor(T)
    }
  }
  var M = this.getRoot(K),S = M.length,I = S,D = true;
  if (H.totalProperty)
  {
    var G = parseInt(this.getTotal(K), 10);
    if (!isNaN(G))
    {
      I = G
    }
  }
  if (H.successProperty)
  {
    var G = this.getSuccess(K);
    if (G === false || G === "false")
    {
      D = false
    }
  }
  var P = [];
  for (var O = 0; O < S; O++)
  {
    var L = M[O];
    var B = {};
    var J = this.getId(L);
    for (var N = 0; N < E; N++)
    {
      R = F[N];
      var G = this.ef[N](L);
      B[R.name] = R.convert((G !== undefined) ? G : R.defaultValue)
    }
    var C = new A(B, J);
    C.json = L;
    P[O] = C
  }
  return{success:D,records:P,totalRecords:I}
}});
Ext.data.XmlReader = function(A, B)
{
  A = A || {};
  Ext.data.XmlReader.superclass.constructor.call(this, A, B || A.fields)
};
Ext.extend(Ext.data.XmlReader, Ext.data.DataReader, {read:function(A)
{
  var B = A.responseXML;
  if (!B)
  {
    throw {message:"XmlReader.read: XML Document not available"}
  }
  return this.readRecords(B)
},readRecords:function(T)
{
  this.xmlData = T;
  var N = T.documentElement || T;
  var I = Ext.DomQuery;
  var B = this.recordType,L = B.prototype.fields;
  var D = this.meta.id;
  var G = 0,E = true;
  if (this.meta.totalRecords)
  {
    G = I.selectNumber(this.meta.totalRecords, N, 0)
  }
  if (this.meta.success)
  {
    var K = I.selectValue(this.meta.success, N, true);
    E = K !== false && K !== "false"
  }
  var Q = [];
  var U = I.select(this.meta.record, N);
  for (var P = 0,R = U.length; P < R; P++)
  {
    var M = U[P];
    var A = {};
    var J = D ? I.selectValue(D, M) : undefined;
    for (var O = 0,H = L.length; O < H; O++)
    {
      var S = L.items[O];
      var F = I.selectValue(S.mapping || S.name, M, S.defaultValue);
      F = S.convert(F);
      A[S.name] = F
    }
    var C = new B(A, J);
    C.node = M;
    Q[Q.length] = C
  }
  return{success:E,records:Q,totalRecords:G || Q.length}
}});
Ext.data.ArrayReader = function(A, B)
{
  Ext.data.ArrayReader.superclass.constructor.call(this, A, B)
};
Ext.extend(Ext.data.ArrayReader, Ext.data.JsonReader, {readRecords:function(C)
{
  var B = this.meta ? this.meta.id : null;
  var G = this.recordType,K = G.prototype.fields;
  var E = [];
  var M = C;
  for (var I = 0; I < M.length; I++)
  {
    var D = M[I];
    var O = {};
    var A = ((B || B === 0) && D[B] !== undefined && D[B] !== "" ? D[B] : null);
    for (var H = 0,P = K.length; H < P; H++)
    {
      var L = K.items[H];
      var F = L.mapping !== undefined && L.mapping !== null ? L.mapping : H;
      var N = D[F] !== undefined ? D[F] : L.defaultValue;
      N = L.convert(N);
      O[L.name] = N
    }
    var J = new G(O, A);
    J.json = D;
    E[E.length] = J
  }
  return{records:E,totalRecords:E.length}
}});
Ext.data.Tree = function(A)
{
  this.nodeHash = {};
  this.root = null;
  if (A)
  {
    this.setRootNode(A)
  }
  this.addEvents({"append":true,"remove":true,"move":true,"insert":true,"beforeappend":true,"beforeremove":true,"beforemove":true,"beforeinsert":true});
  Ext.data.Tree.superclass.constructor.call(this)
};
Ext.extend(Ext.data.Tree, Ext.util.Observable, {pathSeparator:"/",proxyNodeEvent:function()
{
  return this.fireEvent.apply(this, arguments)
},getRootNode:function()
{
  return this.root
},setRootNode:function(A)
{
  this.root = A;
  A.ownerTree = this;
  A.isRoot = true;
  this.registerNode(A);
  return A
},getNodeById:function(A)
{
  return this.nodeHash[A]
},registerNode:function(A)
{
  this.nodeHash[A.id] = A
},unregisterNode:function(A)
{
  delete this.nodeHash[A.id]
},toString:function()
{
  return"[Tree" + (this.id ? " " + this.id : "") + "]"
}});
Ext.data.Node = function(A)
{
  this.attributes = A || {};
  this.leaf = this.attributes.leaf;
  this.id = this.attributes.id;
  if (!this.id)
  {
    this.id = Ext.id(null, "ynode-");
    this.attributes.id = this.id
  }
  this.childNodes = [];
  if (!this.childNodes.indexOf)
  {
    this.childNodes.indexOf = function(D)
    {
      for (var C = 0,B = this.length; C < B; C++)
      {
        if (this[C] == D)
        {
          return C
        }
      }
      return -1
    }
  }
  this.parentNode = null;
  this.firstChild = null;
  this.lastChild = null;
  this.previousSibling = null;
  this.nextSibling = null;
  this.addEvents({"append":true,"remove":true,"move":true,"insert":true,"beforeappend":true,"beforeremove":true,"beforemove":true,"beforeinsert":true});
  this.listeners = this.attributes.listeners;
  Ext.data.Node.superclass.constructor.call(this)
};
Ext.extend(Ext.data.Node, Ext.util.Observable, {fireEvent:function(B)
{
  if (Ext.data.Node.superclass.fireEvent.apply(this, arguments) === false)
  {
    return false
  }
  var A = this.getOwnerTree();
  if (A)
  {
    if (A.proxyNodeEvent.apply(A, arguments) === false)
    {
      return false
    }
  }
  return true
},isLeaf:function()
{
  return this.leaf === true
},setFirstChild:function(A)
{
  this.firstChild = A
},setLastChild:function(A)
{
  this.lastChild = A
},isLast:function()
{
  return(!this.parentNode ? true : this.parentNode.lastChild == this)
},isFirst:function()
{
  return(!this.parentNode ? true : this.parentNode.firstChild == this)
},hasChildNodes:function()
{
  return !this.isLeaf() && this.childNodes.length > 0
},appendChild:function(E)
{
  var F = false;
  if (E instanceof Array)
  {
    F = E
  } else
  {
    if (arguments.length > 1)
    {
      F = arguments
    }
  }
  if (F)
  {
    for (var D = 0,A = F.length; D < A; D++)
    {
      this.appendChild(F[D])
    }
  } else
  {
    if (this.fireEvent("beforeappend", this.ownerTree, this, E) === false)
    {
      return false
    }
    var B = this.childNodes.length;
    var C = E.parentNode;
    if (C)
    {
      if (E.fireEvent("beforemove", E.getOwnerTree(), E, C, this, B) === false)
      {
        return false
      }
      C.removeChild(E)
    }
    B = this.childNodes.length;
    if (B == 0)
    {
      this.setFirstChild(E)
    }
    this.childNodes.push(E);
    E.parentNode = this;
    var G = this.childNodes[B - 1];
    if (G)
    {
      E.previousSibling = G;
      G.nextSibling = E
    } else
    {
      E.previousSibling = null
    }
    E.nextSibling = null;
    this.setLastChild(E);
    E.setOwnerTree(this.getOwnerTree());
    this.fireEvent("append", this.ownerTree, this, E, B);
    if (C)
    {
      E.fireEvent("move", this.ownerTree, E, C, this, B)
    }
    return E
  }
},removeChild:function(B)
{
  var A = this.childNodes.indexOf(B);
  if (A == -1)
  {
    return false
  }
  if (this.fireEvent("beforeremove", this.ownerTree, this, B) === false)
  {
    return false
  }
  this.childNodes.splice(A, 1);
  if (B.previousSibling)
  {
    B.previousSibling.nextSibling = B.nextSibling
  }
  if (B.nextSibling)
  {
    B.nextSibling.previousSibling = B.previousSibling
  }
  if (this.firstChild == B)
  {
    this.setFirstChild(B.nextSibling)
  }
  if (this.lastChild == B)
  {
    this.setLastChild(B.previousSibling)
  }
  B.setOwnerTree(null);
  B.parentNode = null;
  B.previousSibling = null;
  B.nextSibling = null;
  this.fireEvent("remove", this.ownerTree, this, B);
  return B
},insertBefore:function(D, A)
{
  if (!A)
  {
    return this.appendChild(D)
  }
  if (D == A)
  {
    return false
  }
  if (this.fireEvent("beforeinsert", this.ownerTree, this, D, A) === false)
  {
    return false
  }
  var B = this.childNodes.indexOf(A);
  var C = D.parentNode;
  var E = B;
  if (C == this && this.childNodes.indexOf(D) < B)
  {
    E--
  }
  if (C)
  {
    if (D.fireEvent("beforemove", D.getOwnerTree(), D, C, this, B, A) === false)
    {
      return false
    }
    C.removeChild(D)
  }
  if (E == 0)
  {
    this.setFirstChild(D)
  }
  this.childNodes.splice(E, 0, D);
  D.parentNode = this;
  var F = this.childNodes[E - 1];
  if (F)
  {
    D.previousSibling = F;
    F.nextSibling = D
  } else
  {
    D.previousSibling = null
  }
  D.nextSibling = A;
  A.previousSibling = D;
  D.setOwnerTree(this.getOwnerTree());
  this.fireEvent("insert", this.ownerTree, this, D, A);
  if (C)
  {
    D.fireEvent("move", this.ownerTree, D, C, this, E, A)
  }
  return D
},item:function(A)
{
  return this.childNodes[A]
},replaceChild:function(A, B)
{
  this.insertBefore(A, B);
  this.removeChild(B);
  return B
},indexOf:function(A)
{
  return this.childNodes.indexOf(A)
},getOwnerTree:function()
{
  if (!this.ownerTree)
  {
    var A = this;
    while (A)
    {
      if (A.ownerTree)
      {
        this.ownerTree = A.ownerTree;
        break
      }
      A = A.parentNode
    }
  }
  return this.ownerTree
},getDepth:function()
{
  var B = 0;
  var A = this;
  while (A.parentNode)
  {
    ++B;
    A = A.parentNode
  }
  return B
},setOwnerTree:function(B)
{
  if (B != this.ownerTree)
  {
    if (this.ownerTree)
    {
      this.ownerTree.unregisterNode(this)
    }
    this.ownerTree = B;
    var D = this.childNodes;
    for (var C = 0,A = D.length; C < A; C++)
    {
      D[C].setOwnerTree(B)
    }
    if (B)
    {
      B.registerNode(this)
    }
  }
},getPath:function(B)
{
  B = B || "id";
  var D = this.parentNode;
  var A = [this.attributes[B]];
  while (D)
  {
    A.unshift(D.attributes[B]);
    D = D.parentNode
  }
  var C = this.getOwnerTree().pathSeparator;
  return C + A.join(C)
},bubble:function(C, B, A)
{
  var D = this;
  while (D)
  {
    if (C.call(B || D, A || D) === false)
    {
      break
    }
    D = D.parentNode
  }
},cascade:function(F, E, B)
{
  if (F.call(E || this, B || this) !== false)
  {
    var D = this.childNodes;
    for (var C = 0,A = D.length; C < A; C++)
    {
      D[C].cascade(F, E, B)
    }
  }
},eachChild:function(F, E, B)
{
  var D = this.childNodes;
  for (var C = 0,A = D.length; C < A; C++)
  {
    if (F.call(E || this, B || D[C]) === false)
    {
      break
    }
  }
},findChild:function(D, E)
{
  var C = this.childNodes;
  for (var B = 0,A = C.length; B < A; B++)
  {
    if (C[B].attributes[D] == E)
    {
      return C[B]
    }
  }
  return null
},findChildBy:function(E, D)
{
  var C = this.childNodes;
  for (var B = 0,A = C.length; B < A; B++)
  {
    if (E.call(D || C[B], C[B]) === true)
    {
      return C[B]
    }
  }
  return null
},sort:function(E, D)
{
  var C = this.childNodes;
  var A = C.length;
  if (A > 0)
  {
    var F = D ? function()
    {
      E.apply(D, arguments)
    } : E;
    C.sort(F);
    for (var B = 0; B < A; B++)
    {
      var G = C[B];
      G.previousSibling = C[B - 1];
      G.nextSibling = C[B + 1];
      if (B == 0)
      {
        this.setFirstChild(G)
      }
      if (B == A - 1)
      {
        this.setLastChild(G)
      }
    }
  }
},contains:function(A)
{
  return A.isAncestor(this)
},isAncestor:function(A)
{
  var B = this.parentNode;
  while (B)
  {
    if (B == A)
    {
      return true
    }
    B = B.parentNode
  }
  return false
},toString:function()
{
  return"[Node" + (this.id ? " " + this.id : "") + "]"
}});
Ext.ComponentMgr = function()
{
  var A = new Ext.util.MixedCollection();
  return{register:function(B)
  {
    A.add(B)
  },unregister:function(B)
  {
    A.remove(B)
  },get:function(B)
  {
    return A.get(B)
  },onAvailable:function(D, C, B)
  {
    A.on("add", function(E, F)
    {
      if (F.id == D)
      {
        C.call(B || F, F);
        A.un("add", C, B)
      }
    })
  }}
}();
Ext.Component = function(A)
{
  A = A || {};
  if (A.tagName || A.dom || typeof A == "string")
  {
    A = {el:A,id:A.id || A}
  }
  this.initialConfig = A;
  Ext.apply(this, A);
  this.addEvents({disable:true,enable:true,beforeshow:true,show:true,beforehide:true,hide:true,beforerender:true,render:true,beforedestroy:true,destroy:true});
  if (!this.id)
  {
    this.id = "ext-comp-" + (++Ext.Component.AUTO_ID)
  }
  Ext.ComponentMgr.register(this);
  Ext.Component.superclass.constructor.call(this);
  this.initComponent();
  if (this.renderTo)
  {
    this.render(this.renderTo);
    delete this.renderTo
  }
};
Ext.Component.AUTO_ID = 1000;
Ext.extend(Ext.Component, Ext.util.Observable, {hidden:false,disabled:false,rendered:false,disabledClass:"x-item-disabled",allowDomMove:true,hideMode:"display",ctype:"Ext.Component",actionMode:"el",getActionEl:function()
{
  return this[this.actionMode]
},initComponent:Ext.emptyFn,render:function(B, A)
{
  if (!this.rendered && this.fireEvent("beforerender", this) !== false)
  {
    if (!B && this.el)
    {
      this.el = Ext.get(this.el);
      B = this.el.dom.parentNode;
      this.allowDomMove = false
    }
    this.container = Ext.get(B);
    this.rendered = true;
    if (A !== undefined)
    {
      if (typeof A == "number")
      {
        A = this.container.dom.childNodes[A]
      } else
      {
        A = Ext.getDom(A)
      }
    }
    this.onRender(this.container, A || null);
    if (this.cls)
    {
      this.el.addClass(this.cls);
      delete this.cls
    }
    if (this.style)
    {
      this.el.applyStyles(this.style);
      delete this.style
    }
    this.fireEvent("render", this);
    this.afterRender(this.container);
    if (this.hidden)
    {
      this.hide()
    }
    if (this.disabled)
    {
      this.disable()
    }
  }
  return this
},onRender:function(B, A)
{
  if (this.el)
  {
    this.el = Ext.get(this.el);
    if (this.allowDomMove !== false)
    {
      B.dom.insertBefore(this.el.dom, A)
    }
  }
},getAutoCreate:function()
{
  var A = typeof this.autoCreate == "object" ? this.autoCreate : Ext.apply({}, this.defaultAutoCreate);
  if (this.id && !A.id)
  {
    A.id = this.id
  }
  return A
},afterRender:Ext.emptyFn,destroy:function()
{
  if (this.fireEvent("beforedestroy", this) !== false)
  {
    this.purgeListeners();
    this.beforeDestroy();
    if (this.rendered)
    {
      this.el.removeAllListeners();
      this.el.remove();
      if (this.actionMode == "container")
      {
        this.container.remove()
      }
    }
    this.onDestroy();
    Ext.ComponentMgr.unregister(this);
    this.fireEvent("destroy", this)
  }
},beforeDestroy:function()
{
},onDestroy:function()
{
},getEl:function()
{
  return this.el
},getId:function()
{
  return this.id
},focus:function(A)
{
  if (this.rendered)
  {
    this.el.focus();
    if (A === true)
    {
      this.el.dom.select()
    }
  }
  return this
},blur:function()
{
  if (this.rendered)
  {
    this.el.blur()
  }
  return this
},disable:function()
{
  if (this.rendered)
  {
    this.onDisable()
  }
  this.disabled = true;
  this.fireEvent("disable", this);
  return this
},onDisable:function()
{
  this.getActionEl().addClass(this.disabledClass);
  this.el.dom.disabled = true
},enable:function()
{
  if (this.rendered)
  {
    this.onEnable()
  }
  this.disabled = false;
  this.fireEvent("enable", this);
  return this
},onEnable:function()
{
  this.getActionEl().removeClass(this.disabledClass);
  this.el.dom.disabled = false
},setDisabled:function(A)
{
  this[A ? "disable" : "enable"]()
},show:function()
{
  if (this.fireEvent("beforeshow", this) !== false)
  {
    this.hidden = false;
    if (this.rendered)
    {
      this.onShow()
    }
    this.fireEvent("show", this)
  }
  return this
},onShow:function()
{
  var A = this.getActionEl();
  if (this.hideMode == "visibility")
  {
    A.dom.style.visibility = "visible"
  } else
  {
    if (this.hideMode == "offsets")
    {
      A.removeClass("x-hidden")
    } else
    {
      A.dom.style.display = ""
    }
  }
},hide:function()
{
  if (this.fireEvent("beforehide", this) !== false)
  {
    this.hidden = true;
    if (this.rendered)
    {
      this.onHide()
    }
    this.fireEvent("hide", this)
  }
  return this
},onHide:function()
{
  var A = this.getActionEl();
  if (this.hideMode == "visibility")
  {
    A.dom.style.visibility = "hidden"
  } else
  {
    if (this.hideMode == "offsets")
    {
      A.addClass("x-hidden")
    } else
    {
      A.dom.style.display = "none"
    }
  }
},setVisible:function(A)
{
  if (A)
  {
    this.show()
  } else
  {
    this.hide()
  }
  return this
},isVisible:function()
{
  return this.getActionEl().isVisible()
},cloneConfig:function(B)
{
  B = B || {};
  var C = B.id || Ext.id();
  var A = Ext.applyIf(B, this.initialConfig);
  A.id = C;
  return new this.constructor(A)
}});
(function()
{
  Ext.Layer = function(D, C)
  {
    D = D || {};
    var E = Ext.DomHelper;
    var G = D.parentEl,F = G ? Ext.getDom(G) : document.body;
    if (C)
    {
      this.dom = Ext.getDom(C)
    }
    if (!this.dom)
    {
      var H = D.dh || {tag:"div",cls:"x-layer"};
      this.dom = E.append(F, H)
    }
    if (D.cls)
    {
      this.addClass(D.cls)
    }
    this.constrain = D.constrain !== false;
    this.visibilityMode = Ext.Element.VISIBILITY;
    if (D.id)
    {
      this.id = this.dom.id = D.id
    } else
    {
      this.id = Ext.id(this.dom)
    }
    this.zindex = D.zindex || this.getZIndex();
    this.position("absolute", this.zindex);
    if (D.shadow)
    {
      this.shadowOffset = D.shadowOffset || 4;
      this.shadow = new Ext.Shadow({offset:this.shadowOffset,mode:D.shadow})
    } else
    {
      this.shadowOffset = 0
    }
    this.useShim = D.shim !== false && Ext.useShims;
    this.useDisplay = D.useDisplay;
    this.hide()
  };
  var A = Ext.Element.prototype;
  var B = [];
  Ext.extend(Ext.Layer, Ext.Element, {getZIndex:function()
  {
    return this.zindex || parseInt(this.getStyle("z-index"), 10) || 11000
  },getShim:function()
  {
    if (!this.useShim)
    {
      return null
    }
    if (this.shim)
    {
      return this.shim
    }
    var D = B.shift();
    if (!D)
    {
      D = this.createShim();
      D.enableDisplayMode("block");
      D.dom.style.display = "none";
      D.dom.style.visibility = "visible"
    }
    var C = this.dom.parentNode;
    if (D.dom.parentNode != C)
    {
      C.insertBefore(D.dom, this.dom)
    }
    D.setStyle("z-index", this.getZIndex() - 2);
    this.shim = D;
    return D
  },hideShim:function()
  {
    if (this.shim)
    {
      this.shim.setDisplayed(false);
      B.push(this.shim);
      delete this.shim
    }
  },disableShadow:function()
  {
    if (this.shadow)
    {
      this.shadowDisabled = true;
      this.shadow.hide();
      this.lastShadowOffset = this.shadowOffset;
      this.shadowOffset = 0
    }
  },enableShadow:function(C)
  {
    if (this.shadow)
    {
      this.shadowDisabled = false;
      this.shadowOffset = this.lastShadowOffset;
      delete this.lastShadowOffset;
      if (C)
      {
        this.sync(true)
      }
    }
  },sync:function(C)
  {
    var I = this.shadow;
    if (!this.updating && this.isVisible() && (I || this.useShim))
    {
      var F = this.getShim();
      var H = this.getWidth(),E = this.getHeight();
      var D = this.getLeft(true),J = this.getTop(true);
      if (I && !this.shadowDisabled)
      {
        if (C && !I.isVisible())
        {
          I.show(this)
        } else
        {
          I.realign(D, J, H, E)
        }
        if (F)
        {
          if (C)
          {
            F.show()
          }
          var G = I.adjusts,K = F.dom.style;
          K.left = (Math.min(D, D + G.l)) + "px";
          K.top = (Math.min(J, J + G.t)) + "px";
          K.width = (H + G.w) + "px";
          K.height = (E + G.h) + "px"
        }
      } else
      {
        if (F)
        {
          if (C)
          {
            F.show()
          }
          F.setSize(H, E);
          F.setLeftTop(D, J)
        }
      }
    }
  },destroy:function()
  {
    this.hideShim();
    if (this.shadow)
    {
      this.shadow.hide()
    }
    this.removeAllListeners();
    var C = this.dom.parentNode;
    if (C)
    {
      C.removeChild(this.dom)
    }
    Ext.Element.uncache(this.id)
  },remove:function()
  {
    this.destroy()
  },beginUpdate:function()
  {
    this.updating = true
  },endUpdate:function()
  {
    this.updating = false;
    this.sync(true)
  },hideUnders:function(C)
  {
    if (this.shadow)
    {
      this.shadow.hide()
    }
    this.hideShim()
  },constrainXY:function()
  {
    if (this.constrain)
    {
      var G = Ext.lib.Dom.getViewWidth(),C = Ext.lib.Dom.getViewHeight();
      var L = Ext.get(document).getScroll();
      var K = this.getXY();
      var H = K[0],F = K[1];
      var I = this.dom.offsetWidth + this.shadowOffset,D = this.dom.offsetHeight + this.shadowOffset;
      var E = false;
      if ((H + I) > G + L.left)
      {
        H = G - I - this.shadowOffset;
        E = true
      }
      if ((F + D) > C + L.top)
      {
        F = C - D - this.shadowOffset;
        E = true
      }
      if (H < L.left)
      {
        H = L.left;
        E = true
      }
      if (F < L.top)
      {
        F = L.top;
        E = true
      }
      if (E)
      {
        if (this.avoidY)
        {
          var J = this.avoidY;
          if (F <= J && (F + D) >= J)
          {
            F = J - D - 5
          }
        }
        K = [H,F];
        this.storeXY(K);
        A.setXY.call(this, K);
        this.sync()
      }
    }
  },isVisible:function()
  {
    return this.visible
  },showAction:function()
  {
    this.visible = true;
    if (this.useDisplay === true)
    {
      this.setDisplayed("")
    } else
    {
      if (this.lastXY)
      {
        A.setXY.call(this, this.lastXY)
      } else
      {
        if (this.lastLT)
        {
          A.setLeftTop.call(this, this.lastLT[0], this.lastLT[1])
        }
      }
    }
  },hideAction:function()
  {
    this.visible = false;
    if (this.useDisplay === true)
    {
      this.setDisplayed(false)
    } else
    {
      this.setLeftTop(-10000, -10000)
    }
  },setVisible:function(E, D, G, H, F)
  {
    if (E)
    {
      this.showAction()
    }
    if (D && E)
    {
      var C = function()
      {
        this.sync(true);
        if (H)
        {
          H()
        }
      }.createDelegate(this);
      A.setVisible.call(this, true, true, G, C, F)
    } else
    {
      if (!E)
      {
        this.hideUnders(true)
      }
      var C = H;
      if (D)
      {
        C = function()
        {
          this.hideAction();
          if (H)
          {
            H()
          }
        }.createDelegate(this)
      }
      A.setVisible.call(this, E, D, G, C, F);
      if (E)
      {
        this.sync(true)
      } else
      {
        if (!D)
        {
          this.hideAction()
        }
      }
    }
  },storeXY:function(C)
  {
    delete this.lastLT;
    this.lastXY = C
  },storeLeftTop:function(D, C)
  {
    delete this.lastXY;
    this.lastLT = [D,C]
  },beforeFx:function()
  {
    this.beforeAction();
    return Ext.Layer.superclass.beforeFx.apply(this, arguments)
  },afterFx:function()
  {
    Ext.Layer.superclass.afterFx.apply(this, arguments);
    this.sync(this.isVisible())
  },beforeAction:function()
  {
    if (!this.updating && this.shadow)
    {
      this.shadow.hide()
    }
  },setLeft:function(C)
  {
    this.storeLeftTop(C, this.getTop(true));
    A.setLeft.apply(this, arguments);
    this.sync()
  },setTop:function(C)
  {
    this.storeLeftTop(this.getLeft(true), C);
    A.setTop.apply(this, arguments);
    this.sync()
  },setLeftTop:function(D, C)
  {
    this.storeLeftTop(D, C);
    A.setLeftTop.apply(this, arguments);
    this.sync()
  },setXY:function(F, D, G, H, E)
  {
    this.fixDisplay();
    this.beforeAction();
    this.storeXY(F);
    var C = this.createCB(H);
    A.setXY.call(this, F, D, G, C, E);
    if (!D)
    {
      C()
    }
  },createCB:function(D)
  {
    var C = this;
    return function()
    {
      C.constrainXY();
      C.sync(true);
      if (D)
      {
        D()
      }
    }
  },setX:function(C, D, F, G, E)
  {
    this.setXY([C,this.getY()], D, F, G, E)
  },setY:function(G, C, E, F, D)
  {
    this.setXY([this.getX(),G], C, E, F, D)
  },setSize:function(E, F, D, H, I, G)
  {
    this.beforeAction();
    var C = this.createCB(I);
    A.setSize.call(this, E, F, D, H, C, G);
    if (!D)
    {
      C()
    }
  },setWidth:function(E, D, G, H, F)
  {
    this.beforeAction();
    var C = this.createCB(H);
    A.setWidth.call(this, E, D, G, C, F);
    if (!D)
    {
      C()
    }
  },setHeight:function(E, D, G, H, F)
  {
    this.beforeAction();
    var C = this.createCB(H);
    A.setHeight.call(this, E, D, G, C, F);
    if (!D)
    {
      C()
    }
  },setBounds:function(J, H, K, D, I, F, G, E)
  {
    this.beforeAction();
    var C = this.createCB(G);
    if (!I)
    {
      this.storeXY([J,H]);
      A.setXY.call(this, [J,H]);
      A.setSize.call(this, K, D, I, F, C, E);
      C()
    } else
    {
      A.setBounds.call(this, J, H, K, D, I, F, C, E)
    }
    return this
  },setZIndex:function(C)
  {
    this.zindex = C;
    this.setStyle("z-index", C + 2);
    if (this.shadow)
    {
      this.shadow.setZIndex(C + 1)
    }
    if (this.shim)
    {
      this.shim.setStyle("z-index", C)
    }
  }})
})();
Ext.Shadow = function(C)
{
  Ext.apply(this, C);
  if (typeof this.mode != "string")
  {
    this.mode = this.defaultMode
  }
  var D = this.offset,B = {h:0};
  var A = Math.floor(this.offset / 2);
  switch (this.mode.toLowerCase())
      {case"drop":B.w = 0;B.l = B.t = D;B.t -= 1;if (Ext.isIE)
  {
    B.l -= this.offset + A;
    B.t -= this.offset + A;
    B.w -= A;
    B.h -= A;
    B.t += 1
  }break;case"sides":B.w = (D * 2);B.l = -D;B.t = D - 1;if (Ext.isIE)
  {
    B.l -= (this.offset - A);
    B.t -= this.offset + A;
    B.l += 1;
    B.w -= (this.offset - A) * 2;
    B.w -= A + 1;
    B.h -= 1
  }break;case"frame":B.w = B.h = (D * 2);B.l = B.t = -D;B.t += 1;B.h -= 2;if (Ext.isIE)
  {
    B.l -= (this.offset - A);
    B.t -= (this.offset - A);
    B.l += 1;
    B.w -= (this.offset + A + 1);
    B.h -= (this.offset + A);
    B.h += 1
  }break}
  this.adjusts = B
};
Ext.Shadow.prototype = {offset:4,defaultMode:"drop",show:function(A)
{
  A = Ext.get(A);
  if (!this.el)
  {
    this.el = Ext.Shadow.Pool.pull();
    if (this.el.dom.nextSibling != A.dom)
    {
      this.el.insertBefore(A)
    }
  }
  this.el.setStyle("z-index", this.zIndex || parseInt(A.getStyle("z-index"), 10) - 1);
  if (Ext.isIE)
  {
    this.el.dom.style.filter = "progid:DXImageTransform.Microsoft.alpha(opacity=50) progid:DXImageTransform.Microsoft.Blur(pixelradius=" + (this.offset) + ")"
  }
  this.realign(A.getLeft(true), A.getTop(true), A.getWidth(), A.getHeight());
  this.el.dom.style.display = "block"
},isVisible:function()
{
  return this.el ? true : false
},realign:function(A, M, L, D)
{
  if (!this.el)
  {
    return
  }
  var I = this.adjusts,G = this.el.dom,N = G.style;
  var E = 0;
  N.left = (A + I.l) + "px";
  N.top = (M + I.t) + "px";
  var K = (L + I.w),C = (D + I.h),F = K + "px",J = C + "px";
  if (N.width != F || N.height != J)
  {
    N.width = F;
    N.height = J;
    if (!Ext.isIE)
    {
      var H = G.childNodes;
      var B = Math.max(0, (K - 12)) + "px";
      H[0].childNodes[1].style.width = B;
      H[1].childNodes[1].style.width = B;
      H[2].childNodes[1].style.width = B;
      H[1].style.height = Math.max(0, (C - 12)) + "px"
    }
  }
},hide:function()
{
  if (this.el)
  {
    this.el.dom.style.display = "none";
    Ext.Shadow.Pool.push(this.el);
    delete this.el
  }
},setZIndex:function(A)
{
  this.zIndex = A;
  if (this.el)
  {
    this.el.setStyle("z-index", A)
  }
}};
Ext.Shadow.Pool = function()
{
  var B = [];
  var A = Ext.isIE ? "<div class=\"x-ie-shadow\"></div>" : "<div class=\"x-shadow\"><div class=\"xst\"><div class=\"xstl\"></div><div class=\"xstc\"></div><div class=\"xstr\"></div></div><div class=\"xsc\"><div class=\"xsml\"></div><div class=\"xsmc\"></div><div class=\"xsmr\"></div></div><div class=\"xsb\"><div class=\"xsbl\"></div><div class=\"xsbc\"></div><div class=\"xsbr\"></div></div></div>";
  return{pull:function()
  {
    var C = B.shift();
    if (!C)
    {
      C = Ext.get(Ext.DomHelper.insertHtml("beforeBegin", document.body.firstChild, A));
      C.autoBoxAdjust = false
    }
    return C
  },push:function(C)
  {
    B.push(C)
  }}
}();
Ext.BoxComponent = function(A)
{
  Ext.BoxComponent.superclass.constructor.call(this, A);
  this.addEvents({resize:true,move:true})
};
Ext.extend(Ext.BoxComponent, Ext.Component, {boxReady:false,deferHeight:false,setSize:function(B, D)
{
  if (typeof B == "object")
  {
    D = B.height;
    B = B.width
  }
  if (!this.boxReady)
  {
    this.width = B;
    this.height = D;
    return this
  }
  if (this.lastSize && this.lastSize.width == B && this.lastSize.height == D)
  {
    return this
  }
  this.lastSize = {width:B,height:D};
  var C = this.adjustSize(B, D);
  var F = C.width,A = C.height;
  if (F !== undefined || A !== undefined)
  {
    var E = this.getResizeEl();
    if (!this.deferHeight && F !== undefined && A !== undefined)
    {
      E.setSize(F, A)
    } else
    {
      if (!this.deferHeight && A !== undefined)
      {
        E.setHeight(A)
      } else
      {
        if (F !== undefined)
        {
          E.setWidth(F)
        }
      }
    }
    this.onResize(F, A, B, D);
    this.fireEvent("resize", this, F, A, B, D)
  }
  return this
},getSize:function()
{
  return this.el.getSize()
},getPosition:function(A)
{
  if (A === true)
  {
    return[this.el.getLeft(true),this.el.getTop(true)]
  }
  return this.xy || this.el.getXY()
},getBox:function(A)
{
  var B = this.el.getSize();
  if (A)
  {
    B.x = this.el.getLeft(true);
    B.y = this.el.getTop(true)
  } else
  {
    var C = this.xy || this.el.getXY();
    B.x = C[0];
    B.y = C[1]
  }
  return B
},updateBox:function(A)
{
  this.setSize(A.width, A.height);
  this.setPagePosition(A.x, A.y);
  return this
},getResizeEl:function()
{
  return this.resizeEl || this.el
},getPositionEl:function()
{
  return this.positionEl || this.el
},setPosition:function(A, F)
{
  this.x = A;
  this.y = F;
  if (!this.boxReady)
  {
    return this
  }
  var B = this.adjustPosition(A, F);
  var E = B.x,D = B.y;
  var C = this.getPositionEl();
  if (E !== undefined || D !== undefined)
  {
    if (E !== undefined && D !== undefined)
    {
      C.setLeftTop(E, D)
    } else
    {
      if (E !== undefined)
      {
        C.setLeft(E)
      } else
      {
        if (D !== undefined)
        {
          C.setTop(D)
        }
      }
    }
    this.onPosition(E, D);
    this.fireEvent("move", this, E, D)
  }
  return this
},setPagePosition:function(A, C)
{
  this.pageX = A;
  this.pageY = C;
  if (!this.boxReady)
  {
    return
  }
  if (A === undefined || C === undefined)
  {
    return
  }
  var B = this.el.translatePoints(A, C);
  this.setPosition(B.left, B.top);
  return this
},onRender:function(B, A)
{
  Ext.BoxComponent.superclass.onRender.call(this, B, A);
  if (this.resizeEl)
  {
    this.resizeEl = Ext.get(this.resizeEl)
  }
  if (this.positionEl)
  {
    this.positionEl = Ext.get(this.positionEl)
  }
},afterRender:function()
{
  Ext.BoxComponent.superclass.afterRender.call(this);
  this.boxReady = true;
  this.setSize(this.width, this.height);
  if (this.x || this.y)
  {
    this.setPosition(this.x, this.y)
  }
  if (this.pageX || this.pageY)
  {
    this.setPagePosition(this.pageX, this.pageY)
  }
},syncSize:function()
{
  delete this.lastSize;
  this.setSize(this.el.getWidth(), this.el.getHeight());
  return this
},onResize:function(D, B, A, C)
{
},onPosition:function(A, B)
{
},adjustSize:function(A, B)
{
  if (this.autoWidth)
  {
    A = "auto"
  }
  if (this.autoHeight)
  {
    B = "auto"
  }
  return{width:A,height:B}
},adjustPosition:function(A, B)
{
  return{x:A,y:B}
}});
Ext.SplitBar = function(C, E, B, D, A)
{
  this.el = Ext.get(C, true);
  this.el.dom.unselectable = "on";
  this.resizingEl = Ext.get(E, true);
  this.orientation = B || Ext.SplitBar.HORIZONTAL;
  this.minSize = 0;
  this.maxSize = 2000;
  this.animate = false;
  this.useShim = false;
  this.shim = null;
  if (!A)
  {
    this.proxy = Ext.SplitBar.createProxy(this.orientation)
  } else
  {
    this.proxy = Ext.get(A).dom
  }
  this.dd = new Ext.dd.DDProxy(this.el.dom.id, "XSplitBars", {dragElId:this.proxy.id});
  this.dd.b4StartDrag = this.onStartProxyDrag.createDelegate(this);
  this.dd.endDrag = this.onEndProxyDrag.createDelegate(this);
  this.dragSpecs = {};
  this.adapter = new Ext.SplitBar.BasicLayoutAdapter();
  this.adapter.init(this);
  if (this.orientation == Ext.SplitBar.HORIZONTAL)
  {
    this.placement = D || (this.el.getX() > this.resizingEl.getX() ? Ext.SplitBar.LEFT : Ext.SplitBar.RIGHT);
    this.el.addClass("x-splitbar-h")
  } else
  {
    this.placement = D || (this.el.getY() > this.resizingEl.getY() ? Ext.SplitBar.TOP : Ext.SplitBar.BOTTOM);
    this.el.addClass("x-splitbar-v")
  }
  this.addEvents({"resize":true,"moved":true,"beforeresize":true,"beforeapply":true});
  Ext.SplitBar.superclass.constructor.call(this)
};
Ext.extend(Ext.SplitBar, Ext.util.Observable, {onStartProxyDrag:function(A, F)
{
  this.fireEvent("beforeresize", this);
  if (!this.overlay)
  {
    var E = Ext.DomHelper.insertFirst(document.body, {cls:"x-drag-overlay",html:"&#160;"}, true);
    E.unselectable();
    E.enableDisplayMode("block");
    Ext.SplitBar.prototype.overlay = E
  }
  this.overlay.setSize(Ext.lib.Dom.getViewWidth(true), Ext.lib.Dom.getViewHeight(true));
  this.overlay.show();
  Ext.get(this.proxy).setDisplayed("block");
  var C = this.adapter.getElementSize(this);
  this.activeMinSize = this.getMinimumSize();
  this.activeMaxSize = this.getMaximumSize();
  var D = C - this.activeMinSize;
  var B = Math.max(this.activeMaxSize - C, 0);
  if (this.orientation == Ext.SplitBar.HORIZONTAL)
  {
    this.dd.resetConstraints();
    this.dd.setXConstraint(this.placement == Ext.SplitBar.LEFT ? D : B, this.placement == Ext.SplitBar.LEFT ? B : D);
    this.dd.setYConstraint(0, 0)
  } else
  {
    this.dd.resetConstraints();
    this.dd.setXConstraint(0, 0);
    this.dd.setYConstraint(this.placement == Ext.SplitBar.TOP ? D : B, this.placement == Ext.SplitBar.TOP ? B : D)
  }
  this.dragSpecs.startSize = C;
  this.dragSpecs.startPoint = [A,F];
  Ext.dd.DDProxy.prototype.b4StartDrag.call(this.dd, A, F)
},onEndProxyDrag:function(C)
{
  Ext.get(this.proxy).setDisplayed(false);
  var B = Ext.lib.Event.getXY(C);
  if (this.overlay)
  {
    this.overlay.hide()
  }
  var A;
  if (this.orientation == Ext.SplitBar.HORIZONTAL)
  {
    A = this.dragSpecs.startSize + (this.placement == Ext.SplitBar.LEFT ? B[0] - this.dragSpecs.startPoint[0] : this.dragSpecs.startPoint[0] - B[0])
  } else
  {
    A = this.dragSpecs.startSize + (this.placement == Ext.SplitBar.TOP ? B[1] - this.dragSpecs.startPoint[1] : this.dragSpecs.startPoint[1] - B[1])
  }
  A = Math.min(Math.max(A, this.activeMinSize), this.activeMaxSize);
  if (A != this.dragSpecs.startSize)
  {
    if (this.fireEvent("beforeapply", this, A) !== false)
    {
      this.adapter.setElementSize(this, A);
      this.fireEvent("moved", this, A);
      this.fireEvent("resize", this, A)
    }
  }
},getAdapter:function()
{
  return this.adapter
},setAdapter:function(A)
{
  this.adapter = A;
  this.adapter.init(this)
},getMinimumSize:function()
{
  return this.minSize
},setMinimumSize:function(A)
{
  this.minSize = A
},getMaximumSize:function()
{
  return this.maxSize
},setMaximumSize:function(A)
{
  this.maxSize = A
},setCurrentSize:function(B)
{
  var A = this.animate;
  this.animate = false;
  this.adapter.setElementSize(this, B);
  this.animate = A
},destroy:function(A)
{
  if (this.shim)
  {
    this.shim.remove()
  }
  this.dd.unreg();
  this.proxy.parentNode.removeChild(this.proxy);
  if (A)
  {
    this.el.remove()
  }
}});
Ext.SplitBar.createProxy = function(B)
{
  var C = new Ext.Element(document.createElement("div"));
  C.unselectable();
  var A = "x-splitbar-proxy";
  C.addClass(A + " " + (B == Ext.SplitBar.HORIZONTAL ? A + "-h" : A + "-v"));
  document.body.appendChild(C.dom);
  return C.dom
};
Ext.SplitBar.BasicLayoutAdapter = function()
{
};
Ext.SplitBar.BasicLayoutAdapter.prototype = {init:function(A)
{
},getElementSize:function(A)
{
  if (A.orientation == Ext.SplitBar.HORIZONTAL)
  {
    return A.resizingEl.getWidth()
  } else
  {
    return A.resizingEl.getHeight()
  }
},setElementSize:function(B, A, C)
{
  if (B.orientation == Ext.SplitBar.HORIZONTAL)
  {
    if (!B.animate)
    {
      B.resizingEl.setWidth(A);
      if (C)
      {
        C(B, A)
      }
    } else
    {
      B.resizingEl.setWidth(A, true, 0.1, C, "easeOut")
    }
  } else
  {
    if (!B.animate)
    {
      B.resizingEl.setHeight(A);
      if (C)
      {
        C(B, A)
      }
    } else
    {
      B.resizingEl.setHeight(A, true, 0.1, C, "easeOut")
    }
  }
}};
Ext.SplitBar.AbsoluteLayoutAdapter = function(A)
{
  this.basic = new Ext.SplitBar.BasicLayoutAdapter();
  this.container = Ext.get(A)
};
Ext.SplitBar.AbsoluteLayoutAdapter.prototype = {init:function(A)
{
  this.basic.init(A)
},getElementSize:function(A)
{
  return this.basic.getElementSize(A)
},setElementSize:function(B, A, C)
{
  this.basic.setElementSize(B, A, this.moveSplitter.createDelegate(this, [B]))
},moveSplitter:function(A)
{
  var B = Ext.SplitBar;
  switch (A.placement)
      {case B.LEFT:A.el.setX(A.resizingEl.getRight());break;case B.RIGHT:A.el.setStyle("right", (this.container.getWidth() - A.resizingEl.getLeft()) + "px");break;case B.TOP:A.el.setY(A.resizingEl.getBottom());break;case B.BOTTOM:A.el.setY(A.resizingEl.getTop() - A.el.getHeight());break}
}};
Ext.SplitBar.VERTICAL = 1;
Ext.SplitBar.HORIZONTAL = 2;
Ext.SplitBar.LEFT = 1;
Ext.SplitBar.RIGHT = 2;
Ext.SplitBar.TOP = 3;
Ext.SplitBar.BOTTOM = 4;
Ext.View = function(A, C, B)
{
  this.el = Ext.get(A);
  if (typeof C == "string")
  {
    C = new Ext.Template(C)
  }
  C.compile();
  this.tpl = C;
  Ext.apply(this, B);
  this.addEvents({"beforeclick":true,"click":true,"dblclick":true,"contextmenu":true,"selectionchange":true,"beforeselect":true});
  this.el.on({"click":this.onClick,"dblclick":this.onDblClick,"contextmenu":this.onContextMenu,scope:this});
  this.selections = [];
  this.nodes = [];
  this.cmp = new Ext.CompositeElementLite([]);
  if (this.store)
  {
    this.setStore(this.store, true)
  }
  Ext.View.superclass.constructor.call(this)
};
Ext.extend(Ext.View, Ext.util.Observable, {selectedClass:"x-view-selected",emptyText:"",getEl:function()
{
  return this.el
},refresh:function()
{
  var E = this.tpl;
  this.clearSelections();
  this.el.update("");
  var D = [];
  var B = this.store.getRange();
  if (B.length < 1)
  {
    this.el.update(this.emptyText);
    return
  }
  for (var C = 0,A = B.length; C < A; C++)
  {
    var F = this.prepareData(B[C].data, C, B[C]);
    D[D.length] = E.apply(F)
  }
  this.el.update(D.join(""));
  this.nodes = this.el.dom.childNodes;
  this.updateIndexes(0)
},prepareData:function(A)
{
  return A
},onUpdate:function(C, A)
{
  this.clearSelections();
  var B = this.store.indexOf(A);
  var D = this.nodes[B];
  this.tpl.insertBefore(D, this.prepareData(A.data));
  D.parentNode.removeChild(D);
  this.updateIndexes(B, B)
},onAdd:function(E, B, C)
{
  this.clearSelections();
  if (this.nodes.length == 0)
  {
    this.refresh();
    return
  }
  var G = this.nodes[C];
  for (var D = 0,A = B.length; D < A; D++)
  {
    var F = this.prepareData(B[D].data);
    if (G)
    {
      this.tpl.insertBefore(G, F)
    } else
    {
      this.tpl.append(this.el, F)
    }
  }
  this.updateIndexes(C)
},onRemove:function(C, A, B)
{
  this.clearSelections();
  this.el.dom.removeChild(this.nodes[B]);
  this.updateIndexes(B)
},refreshNode:function(A)
{
  this.onUpdate(this.store, this.store.getAt(A))
},updateIndexes:function(D, C)
{
  var B = this.nodes;
  D = D || 0;
  C = C || B.length - 1;
  for (var A = D; A <= C; A++)
  {
    B[A].nodeIndex = A
  }
},setStore:function(A, B)
{
  if (!B && this.store)
  {
    this.store.un("datachanged", this.refresh);
    this.store.un("add", this.onAdd);
    this.store.un("remove", this.onRemove);
    this.store.un("update", this.onUpdate);
    this.store.un("clear", this.refresh)
  }
  if (A)
  {
    A.on("datachanged", this.refresh, this);
    A.on("add", this.onAdd, this);
    A.on("remove", this.onRemove, this);
    A.on("update", this.onUpdate, this);
    A.on("clear", this.refresh, this)
  }
  this.store = A;
  if (A)
  {
    this.refresh()
  }
},findItemFromChild:function(B)
{
  var A = this.el.dom;
  if (!B || B.parentNode == A)
  {
    return B
  }
  var C = B.parentNode;
  while (C && C != A)
  {
    if (C.parentNode == A)
    {
      return C
    }
    C = C.parentNode
  }
  return null
},onClick:function(C)
{
  var B = this.findItemFromChild(C.getTarget());
  if (B)
  {
    var A = this.indexOf(B);
    if (this.onItemClick(B, A, C) !== false)
    {
      this.fireEvent("click", this, A, B, C)
    }
  } else
  {
    this.clearSelections()
  }
},onContextMenu:function(B)
{
  var A = this.findItemFromChild(B.getTarget());
  if (A)
  {
    this.fireEvent("contextmenu", this, this.indexOf(A), A, B)
  }
},onDblClick:function(B)
{
  var A = this.findItemFromChild(B.getTarget());
  if (A)
  {
    this.fireEvent("dblclick", this, this.indexOf(A), A, B)
  }
},onItemClick:function(B, A, C)
{
  if (this.fireEvent("beforeclick", this, A, B, C) === false)
  {
    return false
  }
  if (this.multiSelect || this.singleSelect)
  {
    if (this.multiSelect && C.shiftKey && this.lastSelection)
    {
      this.select(this.getNodes(this.indexOf(this.lastSelection), A), false)
    } else
    {
      this.select(B, this.multiSelect && C.ctrlKey);
      this.lastSelection = B
    }
    C.preventDefault()
  }
  return true
},getSelectionCount:function()
{
  return this.selections.length
},getSelectedNodes:function()
{
  return this.selections
},getSelectedIndexes:function()
{
  var B = [],D = this.selections;
  for (var C = 0,A = D.length; C < A; C++)
  {
    B.push(D[C].nodeIndex)
  }
  return B
},clearSelections:function(A)
{
  if (this.nodes && (this.multiSelect || this.singleSelect) && this.selections.length > 0)
  {
    this.cmp.elements = this.selections;
    this.cmp.removeClass(this.selectedClass);
    this.selections = [];
    if (!A)
    {
      this.fireEvent("selectionchange", this, this.selections)
    }
  }
},isSelected:function(B)
{
  var A = this.selections;
  if (A.length < 1)
  {
    return false
  }
  B = this.getNode(B);
  return A.indexOf(B) !== -1
},select:function(D, F, B)
{
  if (D instanceof Array)
  {
    if (!F)
    {
      this.clearSelections(true)
    }
    for (var C = 0,A = D.length; C < A; C++)
    {
      this.select(D[C], true, true)
    }
  } else
  {
    var E = this.getNode(D);
    if (E && !this.isSelected(E))
    {
      if (!F)
      {
        this.clearSelections(true)
      }
      if (this.fireEvent("beforeselect", this, E, this.selections) !== false)
      {
        Ext.fly(E).addClass(this.selectedClass);
        this.selections.push(E);
        if (!B)
        {
          this.fireEvent("selectionchange", this, this.selections)
        }
      }
    }
  }
},getNode:function(A)
{
  if (typeof A == "string")
  {
    return document.getElementById(A)
  } else
  {
    if (typeof A == "number")
    {
      return this.nodes[A]
    }
  }
  return A
},getNodes:function(E, A)
{
  var D = this.nodes;
  E = E || 0;
  A = typeof A == "undefined" ? D.length - 1 : A;
  var B = [];
  if (E <= A)
  {
    for (var C = E; C <= A; C++)
    {
      B.push(D[C])
    }
  } else
  {
    for (var C = E; C >= A; C--)
    {
      B.push(D[C])
    }
  }
  return B
},indexOf:function(D)
{
  D = this.getNode(D);
  if (typeof D.nodeIndex == "number")
  {
    return D.nodeIndex
  }
  var C = this.nodes;
  for (var B = 0,A = C.length; B < A; B++)
  {
    if (C[B] == D)
    {
      return B
    }
  }
  return -1
}});
Ext.JsonView = function(A, D, C)
{
  Ext.JsonView.superclass.constructor.call(this, A, D, C);
  var B = this.el.getUpdateManager();
  B.setRenderer(this);
  B.on("update", this.onLoad, this);
  B.on("failure", this.onLoadException, this);
  this.addEvents({"beforerender":true,"load":true,"loadexception":true})
};
Ext.extend(Ext.JsonView, Ext.View, {jsonRoot:"",refresh:function()
{
  this.clearSelections();
  this.el.update("");
  var C = [];
  var E = this.jsonData;
  if (E && E.length > 0)
  {
    for (var B = 0,A = E.length; B < A; B++)
    {
      var D = this.prepareData(E[B], B, E);
      C[C.length] = this.tpl.apply(D)
    }
  } else
  {
    C.push(this.emptyText)
  }
  this.el.update(C.join(""));
  this.nodes = this.el.dom.childNodes;
  this.updateIndexes(0)
},load:function()
{
  var A = this.el.getUpdateManager();
  A.update.apply(A, arguments)
},render:function(el, response)
{
  this.clearSelections();
  this.el.update("");
  var o;
  try
  {
    o = Ext.util.JSON.decode(response.responseText);
    if (this.jsonRoot)
    {
      o = eval("o." + this.jsonRoot)
    }
  } catch(e)
  {
  }
  this.jsonData = o;
  this.beforeRender();
  this.refresh()
},getCount:function()
{
  return this.jsonData ? this.jsonData.length : 0
},getNodeData:function(C)
{
  if (C instanceof Array)
  {
    var D = [];
    for (var B = 0,A = C.length; B < A; B++)
    {
      D.push(this.getNodeData(C[B]))
    }
    return D
  }
  return this.jsonData[this.indexOf(C)] || null
},beforeRender:function()
{
  this.snapshot = this.jsonData;
  if (this.sortInfo)
  {
    this.sort.apply(this, this.sortInfo)
  }
  this.fireEvent("beforerender", this, this.jsonData)
},onLoad:function(A, B)
{
  this.fireEvent("load", this, this.jsonData, B)
},onLoadException:function(A, B)
{
  this.fireEvent("loadexception", this, B)
},filter:function(F, E)
{
  if (this.jsonData)
  {
    var D = [];
    var C = this.snapshot;
    if (typeof E == "string")
    {
      var H = E.length;
      if (H == 0)
      {
        this.clearFilter();
        return
      }
      E = E.toLowerCase();
      for (var B = 0,A = C.length; B < A; B++)
      {
        var G = C[B];
        if (G[F].substr(0, H).toLowerCase() == E)
        {
          D.push(G)
        }
      }
    } else
    {
      if (E.exec)
      {
        for (var B = 0,A = C.length; B < A; B++)
        {
          var G = C[B];
          if (E.test(G[F]))
          {
            D.push(G)
          }
        }
      } else
      {
        return
      }
    }
    this.jsonData = D;
    this.refresh()
  }
},filterBy:function(E, D)
{
  if (this.jsonData)
  {
    var F = [];
    var C = this.snapshot;
    for (var B = 0,A = C.length; B < A; B++)
    {
      var G = C[B];
      if (E.call(D || this, G))
      {
        F.push(G)
      }
    }
    this.jsonData = F;
    this.refresh()
  }
},clearFilter:function()
{
  if (this.snapshot && this.jsonData != this.snapshot)
  {
    this.jsonData = this.snapshot;
    this.refresh()
  }
},sort:function(D, A, F)
{
  this.sortInfo = Array.prototype.slice.call(arguments, 0);
  if (this.jsonData)
  {
    var E = D;
    var B = A && A.toLowerCase() == "desc";
    var C = function(H, G)
    {
      var J = F ? F(H[E]) : H[E];
      var I = F ? F(G[E]) : G[E];
      if (J < I)
      {
        return B ? +1 : -1
      } else
      {
        if (J > I)
        {
          return B ? -1 : +1
        } else
        {
          return 0
        }
      }
    };
    this.jsonData.sort(C);
    this.refresh();
    if (this.jsonData != this.snapshot)
    {
      this.snapshot.sort(C)
    }
  }
}});
Ext.ColorPalette = function(A)
{
  Ext.ColorPalette.superclass.constructor.call(this, A);
  this.addEvents({select:true});
  if (this.handler)
  {
    this.on("select", this.handler, this.scope, true)
  }
};
Ext.extend(Ext.ColorPalette, Ext.Component, {itemCls:"x-color-palette",value:null,clickEvent:"click",ctype:"Ext.ColorPalette",allowReselect:false,colors:["000000","993300","333300","003300","003366","000080","333399","333333","800000","FF6600","808000","008000","008080","0000FF","666699","808080","FF0000","FF9900","99CC00","339966","33CCCC","3366FF","800080","969696","FF00FF","FFCC00","FFFF00","00FF00","00FFFF","00CCFF","993366","C0C0C0","FF99CC","FFCC99","FFFF99","CCFFCC","CCFFFF","99CCFF","CC99FF","FFFFFF"],onRender:function(C, B)
{
  var E = new Ext.MasterTemplate("<tpl><a href=\"#\" class=\"color-{0}\" hidefocus=\"on\"><em><span style=\"background:#{0}\" unselectable=\"on\">&#160;</span></em></a></tpl>");
  var G = this.colors;
  for (var D = 0,A = G.length; D < A; D++)
  {
    E.add([G[D]])
  }
  var F = document.createElement("div");
  F.className = this.itemCls;
  E.overwrite(F);
  C.dom.insertBefore(F, B);
  this.el = Ext.get(F);
  this.el.on(this.clickEvent, this.handleClick, this, {delegate:"a"});
  if (this.clickEvent != "click")
  {
    this.el.on("click", Ext.emptyFn, this, {delegate:"a",preventDefault:true})
  }
},afterRender:function()
{
  Ext.ColorPalette.superclass.afterRender.call(this);
  if (this.value)
  {
    var A = this.value;
    this.value = null;
    this.select(A)
  }
},handleClick:function(B, A)
{
  B.preventDefault();
  if (!this.disabled)
  {
    var C = A.className.match(/(?:^|\s)color-(.{6})(?:\s|$)/)[1];
    this.select(C.toUpperCase())
  }
},select:function(A)
{
  A = A.replace("#", "");
  if (A != this.value || this.allowReselect)
  {
    var B = this.el;
    if (this.value)
    {
      B.child("a.color-" + this.value).removeClass("x-color-palette-sel")
    }
    B.child("a.color-" + A).addClass("x-color-palette-sel");
    this.value = A;
    this.fireEvent("select", this, A)
  }
}});
Ext.DatePicker = function(B)
{
  Ext.DatePicker.superclass.constructor.call(this, B);
  this.value = B && B.value ? B.value.clearTime() : new Date().clearTime();
  this.addEvents({select:true});
  if (this.handler)
  {
    this.on("select", this.handler, this.scope || this)
  }
  if (!this.disabledDatesRE && this.disabledDates)
  {
    var A = this.disabledDates;
    var D = "(?:";
    for (var C = 0; C < A.length; C++)
    {
      D += A[C];
      if (C != A.length - 1)
      {
        D += "|"
      }
    }
    this.disabledDatesRE = new RegExp(D + ")")
  }
};
Ext.extend(Ext.DatePicker, Ext.Component, {todayText:"Today",okText:"&#160;OK&#160;",cancelText:"Cancel",todayTip:"{0} (Spacebar)",minDate:null,maxDate:null,minText:"This date is before the minimum date",maxText:"This date is after the maximum date",format:"m/d/y",disabledDays:null,disabledDaysText:"",disabledDatesRE:null,disabledDatesText:"",constrainToViewport:true,monthNames:Date.monthNames,dayNames:Date.dayNames,nextText:"Next Month (Control+Right)",prevText:"Previous Month (Control+Left)",monthYearText:"Choose a month (Control+Up/Down to move years)",startDay:0,setValue:function(B)
{
  var A = this.value;
  this.value = B.clearTime(true);
  if (this.el)
  {
    this.update(this.value)
  }
},getValue:function()
{
  return this.value
},focus:function()
{
  if (this.el)
  {
    this.update(this.activeDate)
  }
},onRender:function(A, G)
{
  var C = ["<table cellspacing=\"0\">","<tr><td class=\"x-date-left\"><a href=\"#\" title=\"",this.prevText,"\">&#160;</a></td><td class=\"x-date-middle\" align=\"center\"></td><td class=\"x-date-right\"><a href=\"#\" title=\"",this.nextText,"\">&#160;</a></td></tr>","<tr><td colspan=\"3\"><table class=\"x-date-inner\" cellspacing=\"0\"><thead><tr>"];
  var F = this.dayNames;
  for (var E = 0; E < 7; E++)
  {
    var H = this.startDay + E;
    if (H > 6)
    {
      H = H - 7
    }
    C.push("<th><span>", F[H].substr(0, 1), "</span></th>")
  }
  C[C.length] = "</tr></thead><tbody><tr>";
  for (var E = 0; E < 42; E++)
  {
    if (E % 7 == 0 && E != 0)
    {
      C[C.length] = "</tr><tr>"
    }
    C[C.length] = "<td><a href=\"#\" hidefocus=\"on\" class=\"x-date-date\" tabIndex=\"1\"><em><span></span></em></a></td>"
  }
  C[C.length] = "</tr></tbody></table></td></tr><tr><td colspan=\"3\" class=\"x-date-bottom\" align=\"center\"></td></tr></table><div class=\"x-date-mp\"></div>";
  var B = document.createElement("div");
  B.className = "x-date-picker";
  B.innerHTML = C.join("");
  A.dom.insertBefore(B, G);
  this.el = Ext.get(B);
  this.eventEl = Ext.get(B.firstChild);
  new Ext.util.ClickRepeater(this.el.child("td.x-date-left a"), {handler:this.showPrevMonth,scope:this,preventDefault:true,stopDefault:true});
  new Ext.util.ClickRepeater(this.el.child("td.x-date-right a"), {handler:this.showNextMonth,scope:this,preventDefault:true,stopDefault:true});
  this.eventEl.on("mousewheel", this.handleMouseWheel, this);
  this.monthPicker = this.el.down("div.x-date-mp");
  this.monthPicker.enableDisplayMode("block");
  var J = new Ext.KeyNav(this.eventEl, {"left":function(K)
  {
    K.ctrlKey ? this.showPrevMonth() : this.update(this.activeDate.add("d", -1))
  },"right":function(K)
  {
    K.ctrlKey ? this.showNextMonth() : this.update(this.activeDate.add("d", 1))
  },"up":function(K)
  {
    K.ctrlKey ? this.showNextYear() : this.update(this.activeDate.add("d", -7))
  },"down":function(K)
  {
    K.ctrlKey ? this.showPrevYear() : this.update(this.activeDate.add("d", 7))
  },"pageUp":function(K)
  {
    this.showNextMonth()
  },"pageDown":function(K)
  {
    this.showPrevMonth()
  },"enter":function(K)
  {
    K.stopPropagation();
    return true
  },scope:this});
  this.eventEl.on("click", this.handleDateClick, this, {delegate:"a.x-date-date"});
  this.eventEl.addKeyListener(Ext.EventObject.SPACE, this.selectToday, this);
  this.el.unselectable();
  this.cells = this.el.select("table.x-date-inner tbody td");
  this.textNodes = this.el.query("table.x-date-inner tbody span");
  this.mbtn = new Ext.Button(this.el.child("td.x-date-middle", true), {text:"&#160;",tooltip:this.monthYearText});
  this.mbtn.on("click", this.showMonthPicker, this);
  this.mbtn.el.child(this.mbtn.menuClassTarget).addClass("x-btn-with-menu");
  var I = (new Date()).dateFormat(this.format);
  var D = new Ext.Button(this.el.child("td.x-date-bottom", true), {text:String.format(this.todayText, I),tooltip:String.format(this.todayTip, I),handler:this.selectToday,scope:this});
  if (Ext.isIE)
  {
    this.el.repaint()
  }
  this.update(this.value)
},createMonthPicker:function()
{
  if (!this.monthPicker.dom.firstChild)
  {
    var A = ["<table border=\"0\" cellspacing=\"0\">"];
    for (var B = 0; B < 6; B++)
    {
      A.push("<tr><td class=\"x-date-mp-month\"><a href=\"#\">", this.monthNames[B].substr(0, 3), "</a></td>", "<td class=\"x-date-mp-month x-date-mp-sep\"><a href=\"#\">", this.monthNames[B + 6].substr(0, 3), "</a></td>", B == 0 ? "<td class=\"x-date-mp-ybtn\" align=\"center\"><a class=\"x-date-mp-prev\"></a></td><td class=\"x-date-mp-ybtn\" align=\"center\"><a class=\"x-date-mp-next\"></a></td></tr>" : "<td class=\"x-date-mp-year\"><a href=\"#\"></a></td><td class=\"x-date-mp-year\"><a href=\"#\"></a></td></tr>")
    }
    A.push("<tr class=\"x-date-mp-btns\"><td colspan=\"4\"><button type=\"button\" class=\"x-date-mp-ok\">", this.okText, "</button><button type=\"button\" class=\"x-date-mp-cancel\">", this.cancelText, "</button></td></tr>", "</table>");
    this.monthPicker.update(A.join(""));
    this.monthPicker.on("click", this.onMonthClick, this);
    this.monthPicker.on("dblclick", this.onMonthDblClick, this);
    this.mpMonths = this.monthPicker.select("td.x-date-mp-month");
    this.mpYears = this.monthPicker.select("td.x-date-mp-year");
    this.mpMonths.each(function(C, D, E)
    {
      E += 1;
      if ((E % 2) == 0)
      {
        C.dom.xmonth = 5 + Math.round(E * 0.5)
      } else
      {
        C.dom.xmonth = Math.round((E - 1) * 0.5)
      }
    })
  }
},showMonthPicker:function()
{
  this.createMonthPicker();
  var A = this.el.getSize();
  this.monthPicker.setSize(A);
  this.monthPicker.child("table").setSize(A);
  this.mpSelMonth = (this.activeDate || this.value).getMonth();
  this.updateMPMonth(this.mpSelMonth);
  this.mpSelYear = (this.activeDate || this.value).getFullYear();
  this.updateMPYear(this.mpSelYear);
  this.monthPicker.slideIn("t", {duration:0.2})
},updateMPYear:function(E)
{
  this.mpyear = E;
  var C = this.mpYears.elements;
  for (var B = 1; B <= 10; B++)
  {
    var D = C[B - 1],A;
    if ((B % 2) == 0)
    {
      A = E + Math.round(B * 0.5);
      D.firstChild.innerHTML = A;
      D.xyear = A
    } else
    {
      A = E - (5 - Math.round(B * 0.5));
      D.firstChild.innerHTML = A;
      D.xyear = A
    }
    this.mpYears.item(B - 1)[A == this.mpSelYear ? "addClass" : "removeClass"]("x-date-mp-sel")
  }
},updateMPMonth:function(A)
{
  this.mpMonths.each(function(B, C, D)
  {
    B[B.dom.xmonth == A ? "addClass" : "removeClass"]("x-date-mp-sel")
  })
},selectMPMonth:function(A)
{
},onMonthClick:function(D, B)
{
  D.stopEvent();
  var C = new Ext.Element(B),A;
  if (C.is("button.x-date-mp-cancel"))
  {
    this.hideMonthPicker()
  } else
  {
    if (C.is("button.x-date-mp-ok"))
    {
      this.update(new Date(this.mpSelYear, this.mpSelMonth, (this.activeDate || this.value).getDate()));
      this.hideMonthPicker()
    } else
    {
      if (A = C.up("td.x-date-mp-month", 2))
      {
        this.mpMonths.removeClass("x-date-mp-sel");
        A.addClass("x-date-mp-sel");
        this.mpSelMonth = A.dom.xmonth
      } else
      {
        if (A = C.up("td.x-date-mp-year", 2))
        {
          this.mpYears.removeClass("x-date-mp-sel");
          A.addClass("x-date-mp-sel");
          this.mpSelYear = A.dom.xyear
        } else
        {
          if (C.is("a.x-date-mp-prev"))
          {
            this.updateMPYear(this.mpyear - 10)
          } else
          {
            if (C.is("a.x-date-mp-next"))
            {
              this.updateMPYear(this.mpyear + 10)
            }
          }
        }
      }
    }
  }
},onMonthDblClick:function(D, B)
{
  D.stopEvent();
  var C = new Ext.Element(B),A;
  if (A = C.up("td.x-date-mp-month", 2))
  {
    this.update(new Date(this.mpSelYear, A.dom.xmonth, (this.activeDate || this.value).getDate()));
    this.hideMonthPicker()
  } else
  {
    if (A = C.up("td.x-date-mp-year", 2))
    {
      this.update(new Date(A.dom.xyear, this.mpSelMonth, (this.activeDate || this.value).getDate()));
      this.hideMonthPicker()
    }
  }
},hideMonthPicker:function(A)
{
  if (this.monthPicker)
  {
    if (A === true)
    {
      this.monthPicker.hide()
    } else
    {
      this.monthPicker.slideOut("t", {duration:0.2})
    }
  }
},showPrevMonth:function(A)
{
  this.update(this.activeDate.add("mo", -1))
},showNextMonth:function(A)
{
  this.update(this.activeDate.add("mo", 1))
},showPrevYear:function()
{
  this.update(this.activeDate.add("y", -1))
},showNextYear:function()
{
  this.update(this.activeDate.add("y", 1))
},handleMouseWheel:function(A)
{
  var B = A.getWheelDelta();
  if (B > 0)
  {
    this.showPrevMonth();
    A.stopEvent()
  } else
  {
    if (B < 0)
    {
      this.showNextMonth();
      A.stopEvent()
    }
  }
},handleDateClick:function(B, A)
{
  B.stopEvent();
  if (A.dateValue && !Ext.fly(A.parentNode).hasClass("x-date-disabled"))
  {
    this.setValue(new Date(A.dateValue));
    this.fireEvent("select", this, this.value)
  }
},selectToday:function()
{
  this.setValue(new Date().clearTime());
  this.fireEvent("select", this, this.value)
},update:function(W)
{
  var A = this.activeDate;
  this.activeDate = W;
  if (A && this.el)
  {
    var I = W.getTime();
    if (A.getMonth() == W.getMonth() && A.getFullYear() == W.getFullYear())
    {
      this.cells.removeClass("x-date-selected");
      this.cells.each(function(a)
      {
        if (a.dom.firstChild.dateValue == I)
        {
          a.addClass("x-date-selected");
          setTimeout(function()
          {
            try
            {
              a.dom.firstChild.focus()
            } catch(b)
            {
            }
          }, 50);
          return false
        }
      });
      return
    }
  }
  var F = W.getDaysInMonth();
  var J = W.getFirstDateOfMonth();
  var C = J.getDay() - this.startDay;
  if (C <= this.startDay)
  {
    C += 7
  }
  var S = W.add("mo", -1);
  var D = S.getDaysInMonth() - C;
  var B = this.cells.elements;
  var K = this.textNodes;
  F += C;
  var P = 86400000;
  var U = (new Date(S.getFullYear(), S.getMonth(), D)).clearTime();
  var T = new Date().clearTime().getTime();
  var N = W.clearTime().getTime();
  var M = this.minDate ? this.minDate.clearTime() : Number.NEGATIVE_INFINITY;
  var Q = this.maxDate ? this.maxDate.clearTime() : Number.POSITIVE_INFINITY;
  var X = this.disabledDatesRE;
  var L = this.disabledDatesText;
  var Z = this.disabledDays ? this.disabledDays.join("") : false;
  var V = this.disabledDaysText;
  var R = this.format;
  var G = function(d, a)
  {
    a.title = "";
    var b = U.getTime();
    a.firstChild.dateValue = b;
    if (b == T)
    {
      a.className += " x-date-today";
      a.title = d.todayText
    }
    if (b == N)
    {
      a.className += " x-date-selected";
      setTimeout(function()
      {
        try
        {
          a.firstChild.focus()
        } catch(f)
        {
        }
      }, 50)
    }
    if (b < M)
    {
      a.className = " x-date-disabled";
      a.title = d.minText;
      return
    }
    if (b > Q)
    {
      a.className = " x-date-disabled";
      a.title = d.maxText;
      return
    }
    if (Z)
    {
      if (Z.indexOf(U.getDay()) != -1)
      {
        a.title = V;
        a.className = " x-date-disabled"
      }
    }
    if (X && R)
    {
      var c = U.dateFormat(R);
      if (X.test(c))
      {
        a.title = L.replace("%0", c);
        a.className = " x-date-disabled"
      }
    }
  };
  var O = 0;
  for (; O < C; O++)
  {
    K[O].innerHTML = (++D);
    U.setDate(U.getDate() + 1);
    B[O].className = "x-date-prevday";
    G(this, B[O])
  }
  for (; O < F; O++)
  {
    intDay = O - C + 1;
    K[O].innerHTML = (intDay);
    U.setDate(U.getDate() + 1);
    B[O].className = "x-date-active";
    G(this, B[O])
  }
  var Y = 0;
  for (; O < 42; O++)
  {
    K[O].innerHTML = (++Y);
    U.setDate(U.getDate() + 1);
    B[O].className = "x-date-nextday";
    G(this, B[O])
  }
  this.mbtn.setText(this.monthNames[W.getMonth()] + " " + W.getFullYear());
  if (!this.internalRender)
  {
    var E = this.el.dom.firstChild;
    var H = E.offsetWidth;
    this.el.setWidth(H + this.el.getBorderWidth("lr"));
    Ext.fly(E).setWidth(H);
    this.internalRender = true;
    if (Ext.isOpera && !this.secondPass)
    {
      E.rows[0].cells[1].style.width = (H - (E.rows[0].cells[0].offsetWidth + E.rows[0].cells[2].offsetWidth)) + "px";
      this.secondPass = true;
      this.update.defer(10, this, [W])
    }
  }
}});
Ext.TabPanel = function(A, B)
{
  this.el = Ext.get(A, true);
  if (B)
  {
    if (typeof B == "boolean")
    {
      this.tabPosition = B ? "bottom" : "top"
    } else
    {
      Ext.apply(this, B)
    }
  }
  if (this.tabPosition == "bottom")
  {
    this.bodyEl = Ext.get(this.createBody(this.el.dom));
    this.el.addClass("x-tabs-bottom")
  }
  this.stripWrap = Ext.get(this.createStrip(this.el.dom), true);
  this.stripEl = Ext.get(this.createStripList(this.stripWrap.dom), true);
  this.stripBody = Ext.get(this.stripWrap.dom.firstChild.firstChild, true);
  if (Ext.isIE)
  {
    Ext.fly(this.stripWrap.dom.firstChild).setStyle("overflow-x", "hidden")
  }
  if (this.tabPosition != "bottom")
  {
    this.bodyEl = Ext.get(this.createBody(this.el.dom));
    this.el.addClass("x-tabs-top")
  }
  this.items = [];
  this.bodyEl.setStyle("position", "relative");
  this.active = null;
  this.activateDelegate = this.activate.createDelegate(this);
  this.addEvents({"tabchange":true,"beforetabchange":true});
  Ext.EventManager.onWindowResize(this.onResize, this);
  this.cpad = this.el.getPadding("lr");
  this.hiddenCount = 0;
  Ext.TabPanel.superclass.constructor.call(this)
};
Ext.extend(Ext.TabPanel, Ext.util.Observable, {tabPosition:"top",currentTabWidth:0,minTabWidth:40,maxTabWidth:250,preferredTabWidth:175,resizeTabs:false,monitorResize:true,addTab:function(E, D, C, A)
{
  var B = new Ext.TabPanelItem(this, E, D, A);
  this.addTabItem(B);
  if (C)
  {
    B.setContent(C)
  }
  return B
},getTab:function(A)
{
  return this.items[A]
},hideTab:function(B)
{
  var A = this.items[B];
  if (!A.isHidden())
  {
    A.setHidden(true);
    this.hiddenCount++;
    this.autoSizeTabs()
  }
},unhideTab:function(B)
{
  var A = this.items[B];
  if (A.isHidden())
  {
    A.setHidden(false);
    this.hiddenCount--;
    this.autoSizeTabs()
  }
},addTabItem:function(A)
{
  this.items[A.id] = A;
  this.items.push(A);
  if (this.resizeTabs)
  {
    A.setWidth(this.currentTabWidth || this.preferredTabWidth);
    this.autoSizeTabs()
  } else
  {
    A.autoSize()
  }
},removeTab:function(E)
{
  var A = this.items;
  var C = A[E];
  if (!C)
  {
    return
  }
  var B = A.indexOf(C);
  if (this.active == C && A.length > 1)
  {
    var D = this.getNextAvailable(B);
    if (D)
    {
      D.activate()
    }
  }
  this.stripEl.dom.removeChild(C.pnode.dom);
  if (C.bodyEl.dom.parentNode == this.bodyEl.dom)
  {
    this.bodyEl.dom.removeChild(C.bodyEl.dom)
  }
  A.splice(B, 1);
  delete this.items[C.id];
  C.fireEvent("close", C);
  C.purgeListeners();
  this.autoSizeTabs()
},getNextAvailable:function(D)
{
  var A = this.items;
  var B = D;
  while (B < A.length)
  {
    var C = A[++B];
    if (C && !C.isHidden())
    {
      return C
    }
  }
  B = D;
  while (B >= 0)
  {
    var C = A[--B];
    if (C && !C.isHidden())
    {
      return C
    }
  }
  return null
},disableTab:function(B)
{
  var A = this.items[B];
  if (A && this.active != A)
  {
    A.disable()
  }
},enableTab:function(B)
{
  var A = this.items[B];
  A.enable()
},activate:function(C)
{
  var A = this.items[C];
  if (!A)
  {
    return null
  }
  if (A == this.active || A.disabled)
  {
    return A
  }
  var B = {};
  this.fireEvent("beforetabchange", this, B, A);
  if (B.cancel !== true && !A.disabled)
  {
    if (this.active)
    {
      this.active.hide()
    }
    this.active = this.items[C];
    this.active.show();
    this.fireEvent("tabchange", this, this.active)
  }
  return A
},getActiveTab:function()
{
  return this.active
},syncHeight:function(B)
{
  var A = (B || this.el.getHeight()) - this.el.getBorderWidth("tb") - this.el.getPadding("tb");
  var D = this.bodyEl.getMargins();
  var C = A - (this.stripWrap.getHeight() || 0) - (D.top + D.bottom);
  this.bodyEl.setHeight(C);
  return C
},onResize:function()
{
  if (this.monitorResize)
  {
    this.autoSizeTabs()
  }
},beginUpdate:function()
{
  this.updating = true
},endUpdate:function()
{
  this.updating = false;
  this.autoSizeTabs()
},autoSizeTabs:function()
{
  var E = this.items.length;
  var B = E - this.hiddenCount;
  if (!this.resizeTabs || E < 1 || B < 1 || this.updating)
  {
    return
  }
  var C = Math.max(this.el.getWidth() - this.cpad, 10);
  var F = Math.floor(C / B);
  var A = this.stripBody;
  if (A.getWidth() > C)
  {
    var D = this.items;
    this.setTabWidth(Math.max(F, this.minTabWidth) - 2);
    if (F < this.minTabWidth)
    {
    }
  } else
  {
    if (this.currentTabWidth < this.preferredTabWidth)
    {
      this.setTabWidth(Math.min(F, this.preferredTabWidth) - 2)
    }
  }
},getCount:function()
{
  return this.items.length
},setTabWidth:function(C)
{
  this.currentTabWidth = C;
  for (var B = 0,A = this.items.length; B < A; B++)
  {
    if (!this.items[B].isHidden())
    {
      this.items[B].setWidth(C)
    }
  }
},destroy:function(C)
{
  Ext.EventManager.removeResizeListener(this.onResize, this);
  for (var B = 0,A = this.items.length; B < A; B++)
  {
    this.items[B].purgeListeners()
  }
  if (C === true)
  {
    this.el.update("");
    this.el.remove()
  }
}});
Ext.TabPanelItem = function(D, F, C, B)
{
  this.tabPanel = D;
  this.id = F;
  this.disabled = false;
  this.text = C;
  this.loaded = false;
  this.closable = B;
  this.bodyEl = Ext.get(D.createItemBody(D.bodyEl.dom, F));
  this.bodyEl.setVisibilityMode(Ext.Element.VISIBILITY);
  this.bodyEl.setStyle("display", "block");
  this.bodyEl.setStyle("zoom", "1");
  this.hideAction();
  var A = D.createStripElements(D.stripEl.dom, C, B);
  this.el = Ext.get(A.el, true);
  this.inner = Ext.get(A.inner, true);
  this.textEl = Ext.get(this.el.dom.firstChild.firstChild.firstChild, true);
  this.pnode = Ext.get(A.el.parentNode, true);
  this.el.on("mousedown", this.onTabMouseDown, this);
  this.el.on("click", this.onTabClick, this);
  if (B)
  {
    var E = Ext.get(A.close, true);
    E.dom.title = this.closeText;
    E.addClassOnOver("close-over");
    E.on("click", this.closeClick, this)
  }
  this.addEvents({"activate":true,"beforeclose":true,"close":true,"deactivate":true});
  this.hidden = false;
  Ext.TabPanelItem.superclass.constructor.call(this)
};
Ext.extend(Ext.TabPanelItem, Ext.util.Observable, {purgeListeners:function()
{
  Ext.util.Observable.prototype.purgeListeners.call(this);
  this.el.removeAllListeners()
},show:function()
{
  this.pnode.addClass("on");
  this.showAction();
  if (Ext.isOpera)
  {
    this.tabPanel.stripWrap.repaint()
  }
  this.fireEvent("activate", this.tabPanel, this)
},isActive:function()
{
  return this.tabPanel.getActiveTab() == this
},hide:function()
{
  this.pnode.removeClass("on");
  this.hideAction();
  this.fireEvent("deactivate", this.tabPanel, this)
},hideAction:function()
{
  this.bodyEl.hide();
  this.bodyEl.setStyle("position", "absolute");
  this.bodyEl.setLeft("-20000px");
  this.bodyEl.setTop("-20000px")
},showAction:function()
{
  this.bodyEl.setStyle("position", "relative");
  this.bodyEl.setTop("");
  this.bodyEl.setLeft("");
  this.bodyEl.show()
},setTooltip:function(A)
{
  if (Ext.QuickTips && Ext.QuickTips.isEnabled())
  {
    this.textEl.dom.qtip = A;
    this.textEl.dom.removeAttribute("title")
  } else
  {
    this.textEl.dom.title = A
  }
},onTabClick:function(A)
{
  A.preventDefault();
  this.tabPanel.activate(this.id)
},onTabMouseDown:function(A)
{
  A.preventDefault();
  this.tabPanel.activate(this.id)
},getWidth:function()
{
  return this.inner.getWidth()
},setWidth:function(B)
{
  var A = B - this.pnode.getPadding("lr");
  this.inner.setWidth(A);
  this.textEl.setWidth(A - this.inner.getPadding("lr"));
  this.pnode.setWidth(B)
},setHidden:function(A)
{
  this.hidden = A;
  this.pnode.setStyle("display", A ? "none" : "")
},isHidden:function()
{
  return this.hidden
},getText:function()
{
  return this.text
},autoSize:function()
{
  this.textEl.setWidth(1);
  this.setWidth(this.textEl.dom.scrollWidth + this.pnode.getPadding("lr") + this.inner.getPadding("lr"))
},setText:function(A)
{
  this.text = A;
  this.textEl.update(A);
  this.setTooltip(A);
  if (!this.tabPanel.resizeTabs)
  {
    this.autoSize()
  }
},activate:function()
{
  this.tabPanel.activate(this.id)
},disable:function()
{
  if (this.tabPanel.active != this)
  {
    this.disabled = true;
    this.pnode.addClass("disabled")
  }
},enable:function()
{
  this.disabled = false;
  this.pnode.removeClass("disabled")
},setContent:function(B, A)
{
  this.bodyEl.update(B, A)
},getUpdateManager:function()
{
  return this.bodyEl.getUpdateManager()
},setUrl:function(A, C, B)
{
  if (this.refreshDelegate)
  {
    this.un("activate", this.refreshDelegate)
  }
  this.refreshDelegate = this._handleRefresh.createDelegate(this, [A,C,B]);
  this.on("activate", this.refreshDelegate);
  return this.bodyEl.getUpdateManager()
},_handleRefresh:function(A, D, C)
{
  if (!C || !this.loaded)
  {
    var B = this.bodyEl.getUpdateManager();
    B.update(A, D, this._setLoaded.createDelegate(this))
  }
},refresh:function()
{
  if (this.refreshDelegate)
  {
    this.loaded = false;
    this.refreshDelegate()
  }
},_setLoaded:function()
{
  this.loaded = true
},closeClick:function(A)
{
  var B = {};
  A.stopEvent();
  this.fireEvent("beforeclose", this, B);
  if (B.cancel !== true)
  {
    this.tabPanel.removeTab(this.id)
  }
},closeText:"Close this tab"});
Ext.TabPanel.prototype.createStrip = function(A)
{
  var B = document.createElement("div");
  B.className = "x-tabs-wrap";
  A.appendChild(B);
  return B
};
Ext.TabPanel.prototype.createStripList = function(A)
{
  A.innerHTML = "<div class=\"x-tabs-strip-wrap\"><table class=\"x-tabs-strip\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\"><tbody><tr></tr></tbody></table></div>";
  return A.firstChild.firstChild.firstChild.firstChild
};
Ext.TabPanel.prototype.createBody = function(B)
{
  var A = document.createElement("div");
  Ext.id(A, "tab-body");
  Ext.fly(A).addClass("x-tabs-body");
  B.appendChild(A);
  return A
};
Ext.TabPanel.prototype.createItemBody = function(B, C)
{
  var A = Ext.getDom(C);
  if (!A)
  {
    A = document.createElement("div");
    A.id = C
  }
  Ext.fly(A).addClass("x-tabs-item-body");
  B.insertBefore(A, B.firstChild);
  return A
};
Ext.TabPanel.prototype.createStripElements = function(D, F, C)
{
  var G = document.createElement("td");
  D.appendChild(G);
  if (C)
  {
    G.className = "x-tabs-closable";
    if (!this.closeTpl)
    {
      this.closeTpl = new Ext.Template("<a href=\"#\" class=\"x-tabs-right\"><span class=\"x-tabs-left\"><em class=\"x-tabs-inner\">" + "<span unselectable=\"on\"" + (this.disableTooltips ? "" : " title=\"{text}\"") + " class=\"x-tabs-text\">{text}</span>" + "<div unselectable=\"on\" class=\"close-icon\">&#160;</div></em></span></a>")
    }
    var B = this.closeTpl.overwrite(G, {"text":F});
    var E = B.getElementsByTagName("div")[0];
    var A = B.getElementsByTagName("em")[0];
    return{"el":B,"close":E,"inner":A}
  } else
  {
    if (!this.tabTpl)
    {
      this.tabTpl = new Ext.Template("<a href=\"#\" class=\"x-tabs-right\"><span class=\"x-tabs-left\"><em class=\"x-tabs-inner\">" + "<span unselectable=\"on\"" + (this.disableTooltips ? "" : " title=\"{text}\"") + " class=\"x-tabs-text\">{text}</span></em></span></a>")
    }
    var B = this.tabTpl.overwrite(G, {"text":F});
    var A = B.getElementsByTagName("em")[0];
    return{"el":B,"inner":A}
  }
};
Ext.Button = function(B, A)
{
  Ext.apply(this, A);
  this.addEvents({"click":true,"toggle":true,"mouseover":true,"mouseout":true});
  if (this.menu)
  {
    this.menu = Ext.menu.MenuMgr.get(this.menu)
  }
  if (B)
  {
    this.render(B)
  }
  Ext.Button.superclass.constructor.call(this)
};
Ext.extend(Ext.Button, Ext.util.Observable, {hidden:false,disabled:false,pressed:false,tabIndex:undefined,enableToggle:false,menu:undefined,menuAlign:"tl-bl?",iconCls:undefined,type:"button",menuClassTarget:"tr",clickEvent:"click",handleMouseEvents:true,tooltipType:"qtip",render:function(D)
{
  var B;
  if (this.hideParent)
  {
    this.parentEl = Ext.get(D)
  }
  if (!this.dhconfig)
  {
    if (!this.template)
    {
      if (!Ext.Button.buttonTemplate)
      {
        Ext.Button.buttonTemplate = new Ext.Template("<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"x-btn-wrap\"><tbody><tr>", "<td class=\"x-btn-left\"><i>&#160;</i></td><td class=\"x-btn-center\"><em unselectable=\"on\"><button class=\"x-btn-text\" type=\"{1}\">{0}</button></em></td><td class=\"x-btn-right\"><i>&#160;</i></td>", "</tr></tbody></table>")
      }
      this.template = Ext.Button.buttonTemplate
    }
    B = this.template.append(D, [this.text || "&#160;",this.type], true);
    var C = B.child("button:first");
    C.on("focus", this.onFocus, this);
    C.on("blur", this.onBlur, this);
    if (this.cls)
    {
      B.addClass(this.cls)
    }
    if (this.icon)
    {
      C.setStyle("background-image", "url(" + this.icon + ")")
    }
    if (this.iconCls)
    {
      C.addClass(this.iconCls);
      if (!this.cls)
      {
        B.addClass(this.text ? "x-btn-text-icon" : "x-btn-icon")
      }
    }
    if (this.tabIndex !== undefined)
    {
      C.dom.tabIndex = this.tabIndex
    }
    if (this.tooltip)
    {
      if (typeof this.tooltip == "object")
      {
        Ext.QuickTips.tips(Ext.apply({target:C.id}, this.tooltip))
      } else
      {
        C.dom[this.tooltipType] = this.tooltip
      }
    }
  } else
  {
    B = Ext.DomHelper.append(Ext.get(D).dom, this.dhconfig, true)
  }
  this.el = B;
  if (this.id)
  {
    this.el.dom.id = this.el.id = this.id
  }
  if (this.menu)
  {
    this.el.child(this.menuClassTarget).addClass("x-btn-with-menu");
    this.menu.on("show", this.onMenuShow, this);
    this.menu.on("hide", this.onMenuHide, this)
  }
  B.addClass("x-btn");
  if (Ext.isIE && !Ext.isIE7)
  {
    this.autoWidth.defer(1, this)
  } else
  {
    this.autoWidth()
  }
  if (this.handleMouseEvents)
  {
    B.on("mouseover", this.onMouseOver, this);
    B.on("mouseout", this.onMouseOut, this);
    B.on("mousedown", this.onMouseDown, this)
  }
  B.on(this.clickEvent, this.onClick, this);
  if (this.hidden)
  {
    this.hide()
  }
  if (this.disabled)
  {
    this.disable()
  }
  Ext.ButtonToggleMgr.register(this);
  if (this.pressed)
  {
    this.el.addClass("x-btn-pressed")
  }
  if (this.repeat)
  {
    var A = new Ext.util.ClickRepeater(B, typeof this.repeat == "object" ? this.repeat : {});
    A.on("click", this.onClick, this)
  }
},getEl:function()
{
  return this.el
},destroy:function()
{
  Ext.ButtonToggleMgr.unregister(this);
  this.el.removeAllListeners();
  this.purgeListeners();
  this.el.remove()
},autoWidth:function()
{
  if (this.el)
  {
    this.el.setWidth("auto");
    if (Ext.isIE7 && Ext.isStrict)
    {
      var A = this.el.child("button");
      if (A && A.getWidth() > 20)
      {
        A.clip();
        A.setWidth(Ext.util.TextMetrics.measure(A, this.text).width + A.getFrameWidth("lr"))
      }
    }
    if (this.minWidth)
    {
      if (this.hidden)
      {
        this.el.beginMeasure()
      }
      if (this.el.getWidth() < this.minWidth)
      {
        this.el.setWidth(this.minWidth)
      }
      if (this.hidden)
      {
        this.el.endMeasure()
      }
    }
  }
},setHandler:function(B, A)
{
  this.handler = B;
  this.scope = A
},setText:function(A)
{
  this.text = A;
  if (this.el)
  {
    this.el.child("td.x-btn-center button.x-btn-text").update(A)
  }
  this.autoWidth()
},getText:function()
{
  return this.text
},show:function()
{
  this.hidden = false;
  if (this.el)
  {
    this[this.hideParent ? "parentEl" : "el"].setStyle("display", "")
  }
},hide:function()
{
  this.hidden = true;
  if (this.el)
  {
    this[this.hideParent ? "parentEl" : "el"].setStyle("display", "none")
  }
},setVisible:function(A)
{
  if (A)
  {
    this.show()
  } else
  {
    this.hide()
  }
},toggle:function(A)
{
  A = A === undefined ? !this.pressed : A;
  if (A != this.pressed)
  {
    if (A)
    {
      this.el.addClass("x-btn-pressed");
      this.pressed = true;
      this.fireEvent("toggle", this, true)
    } else
    {
      this.el.removeClass("x-btn-pressed");
      this.pressed = false;
      this.fireEvent("toggle", this, false)
    }
    if (this.toggleHandler)
    {
      this.toggleHandler.call(this.scope || this, this, A)
    }
  }
},focus:function()
{
  this.el.child("button:first").focus()
},disable:function()
{
  if (this.el)
  {
    this.el.addClass("x-btn-disabled")
  }
  this.disabled = true
},enable:function()
{
  if (this.el)
  {
    this.el.removeClass("x-btn-disabled")
  }
  this.disabled = false
},setDisabled:function(A)
{
  this[A !== true ? "enable" : "disable"]()
},onClick:function(A)
{
  if (A)
  {
    A.preventDefault()
  }
  if (A.button != 0)
  {
    return
  }
  if (!this.disabled)
  {
    if (this.enableToggle)
    {
      this.toggle()
    }
    if (this.menu && !this.menu.isVisible())
    {
      this.menu.show(this.el, this.menuAlign)
    }
    this.fireEvent("click", this, A);
    if (this.handler)
    {
      this.el.removeClass("x-btn-over");
      this.handler.call(this.scope || this, this, A)
    }
  }
},onMouseOver:function(A)
{
  if (!this.disabled)
  {
    this.el.addClass("x-btn-over");
    this.fireEvent("mouseover", this, A)
  }
},onMouseOut:function(A)
{
  if (!A.within(this.el, true))
  {
    this.el.removeClass("x-btn-over");
    this.fireEvent("mouseout", this, A)
  }
},onFocus:function(A)
{
  if (!this.disabled)
  {
    this.el.addClass("x-btn-focus")
  }
},onBlur:function(A)
{
  this.el.removeClass("x-btn-focus")
},onMouseDown:function(A)
{
  if (!this.disabled && A.button == 0)
  {
    this.el.addClass("x-btn-click");
    Ext.get(document).on("mouseup", this.onMouseUp, this)
  }
},onMouseUp:function(A)
{
  if (A.button == 0)
  {
    this.el.removeClass("x-btn-click");
    Ext.get(document).un("mouseup", this.onMouseUp, this)
  }
},onMenuShow:function(A)
{
  this.el.addClass("x-btn-menu-active")
},onMenuHide:function(A)
{
  this.el.removeClass("x-btn-menu-active")
}});
Ext.ButtonToggleMgr = function()
{
  var A = {};
  function B(E, G)
  {
    if (G)
    {
      var F = A[E.toggleGroup];
      for (var D = 0,C = F.length; D < C; D++)
      {
        if (F[D] != E)
        {
          F[D].toggle(false)
        }
      }
    }
  }
  return{register:function(C)
  {
    if (!C.toggleGroup)
    {
      return
    }
    var D = A[C.toggleGroup];
    if (!D)
    {
      D = A[C.toggleGroup] = []
    }
    D.push(C);
    C.on("toggle", B)
  },unregister:function(C)
  {
    if (!C.toggleGroup)
    {
      return
    }
    var D = A[C.toggleGroup];
    if (D)
    {
      D.remove(C);
      C.un("toggle", B)
    }
  }}
}();
Ext.SplitButton = function(B, A)
{
  Ext.SplitButton.superclass.constructor.call(this, B, A);
  this.addEvents({"arrowclick":true})
};
Ext.extend(Ext.SplitButton, Ext.Button, {render:function(D)
{
  var A = new Ext.Template("<table cellspacing=\"0\" class=\"x-btn-menu-wrap x-btn\"><tr><td>", "<table cellspacing=\"0\" class=\"x-btn-wrap x-btn-menu-text-wrap\"><tbody>", "<tr><td class=\"x-btn-left\"><i>&#160;</i></td><td class=\"x-btn-center\"><button class=\"x-btn-text\" type=\"{1}\">{0}</button></td></tr>", "</tbody></table></td><td>", "<table cellspacing=\"0\" class=\"x-btn-wrap x-btn-menu-arrow-wrap\"><tbody>", "<tr><td class=\"x-btn-center\"><button class=\"x-btn-menu-arrow-el\" type=\"button\">&#160;</button></td><td class=\"x-btn-right\"><i>&#160;</i></td></tr>", "</tbody></table></td></tr></table>");
  var B = A.append(D, [this.text,this.type], true);
  var C = B.child("button");
  if (this.cls)
  {
    B.addClass(this.cls)
  }
  if (this.icon)
  {
    C.setStyle("background-image", "url(" + this.icon + ")")
  }
  if (this.iconCls)
  {
    C.addClass(this.iconCls);
    if (!this.cls)
    {
      B.addClass(this.text ? "x-btn-text-icon" : "x-btn-icon")
    }
  }
  this.el = B;
  if (this.handleMouseEvents)
  {
    B.on("mouseover", this.onMouseOver, this);
    B.on("mouseout", this.onMouseOut, this);
    B.on("mousedown", this.onMouseDown, this);
    B.on("mouseup", this.onMouseUp, this)
  }
  B.on(this.clickEvent, this.onClick, this);
  if (this.tooltip)
  {
    if (typeof this.tooltip == "object")
    {
      Ext.QuickTips.tips(Ext.apply({target:C.id}, this.tooltip))
    } else
    {
      C.dom[this.tooltipType] = this.tooltip
    }
  }
  if (this.arrowTooltip)
  {
    B.child("button:nth(2)").dom[this.tooltipType] = this.arrowTooltip
  }
  if (this.hidden)
  {
    this.hide()
  }
  if (this.disabled)
  {
    this.disable()
  }
  if (this.pressed)
  {
    this.el.addClass("x-btn-pressed")
  }
  if (Ext.isIE && !Ext.isIE7)
  {
    this.autoWidth.defer(1, this)
  } else
  {
    this.autoWidth()
  }
  if (this.menu)
  {
    this.menu.on("show", this.onMenuShow, this);
    this.menu.on("hide", this.onMenuHide, this)
  }
},autoWidth:function()
{
  if (this.el)
  {
    var C = this.el.child("table:first");
    var B = this.el.child("table:last");
    this.el.setWidth("auto");
    C.setWidth("auto");
    if (Ext.isIE7 && Ext.isStrict)
    {
      var A = this.el.child("button:first");
      if (A && A.getWidth() > 20)
      {
        A.clip();
        A.setWidth(Ext.util.TextMetrics.measure(A, this.text).width + A.getFrameWidth("lr"))
      }
    }
    if (this.minWidth)
    {
      if (this.hidden)
      {
        this.el.beginMeasure()
      }
      if ((C.getWidth() + B.getWidth()) < this.minWidth)
      {
        C.setWidth(this.minWidth - B.getWidth())
      }
      if (this.hidden)
      {
        this.el.endMeasure()
      }
    }
    this.el.setWidth(C.getWidth() + B.getWidth())
  }
},setHandler:function(B, A)
{
  this.handler = B;
  this.scope = A
},setArrowHandler:function(B, A)
{
  this.arrowHandler = B;
  this.scope = A
},focus:function()
{
  if (this.el)
  {
    this.el.child("button:first").focus()
  }
},onClick:function(A)
{
  A.preventDefault();
  if (!this.disabled)
  {
    if (A.getTarget(".x-btn-menu-arrow-wrap"))
    {
      if (this.menu && !this.menu.isVisible())
      {
        this.menu.show(this.el, this.menuAlign)
      }
      this.fireEvent("arrowclick", this, A);
      if (this.arrowHandler)
      {
        this.arrowHandler.call(this.scope || this, this, A)
      }
    } else
    {
      this.fireEvent("click", this, A);
      if (this.handler)
      {
        this.handler.call(this.scope || this, this, A)
      }
    }
  }
},onMouseDown:function(A)
{
  if (!this.disabled)
  {
    Ext.fly(A.getTarget("table")).addClass("x-btn-click")
  }
},onMouseUp:function(A)
{
  Ext.fly(A.getTarget("table")).removeClass("x-btn-click")
}});
Ext.MenuButton = Ext.SplitButton;
Ext.Toolbar = function(A, C, B)
{
  if (A instanceof Array)
  {
    C = A;
    B = C;
    A = null
  }
  Ext.apply(this, B);
  this.buttons = C;
  if (A)
  {
    this.render(A)
  }
};
Ext.Toolbar.prototype = {render:function(B)
{
  this.el = Ext.get(B);
  if (this.cls)
  {
    this.el.addClass(this.cls)
  }
  this.el.update("<div class=\"x-toolbar x-small-editor\"><table cellspacing=\"0\"><tr></tr></table></div>");
  this.tr = this.el.child("tr", true);
  var A = 0;
  this.items = new Ext.util.MixedCollection(false, function(C)
  {
    return C.id || ("item" + (++A))
  });
  if (this.buttons)
  {
    this.add.apply(this, this.buttons);
    delete this.buttons
  }
},add:function()
{
  var B = arguments,A = B.length;
  for (var C = 0; C < A; C++)
  {
    var D = B[C];
    if (D.applyTo)
    {
      this.addField(D)
    } else
    {
      if (D.render)
      {
        this.addItem(D)
      } else
      {
        if (typeof D == "string")
        {
          if (D == "separator" || D == "-")
          {
            this.addSeparator()
          } else
          {
            if (D == " ")
            {
              this.addSpacer()
            } else
            {
              if (D == "->")
              {
                this.addFill()
              } else
              {
                this.addText(D)
              }
            }
          }
        } else
        {
          if (D.tagName)
          {
            this.addElement(D)
          } else
          {
            if (typeof D == "object")
            {
              this.addButton(D)
            }
          }
        }
      }
    }
  }
},getEl:function()
{
  return this.el
},addSeparator:function()
{
  return this.addItem(new Ext.Toolbar.Separator())
},addSpacer:function()
{
  return this.addItem(new Ext.Toolbar.Spacer())
},addFill:function()
{
  return this.addItem(new Ext.Toolbar.Fill())
},addElement:function(A)
{
  return this.addItem(new Ext.Toolbar.Item(A))
},addItem:function(A)
{
  var B = this.nextBlock();
  A.render(B);
  this.items.add(A);
  return A
},addButton:function(C)
{
  if (C instanceof Array)
  {
    var E = [];
    for (var D = 0,B = C.length; D < B; D++)
    {
      E.push(this.addButton(C[D]))
    }
    return E
  }
  var A = C;
  if (!(C instanceof Ext.Toolbar.Button))
  {
    A = C.split ? new Ext.Toolbar.SplitButton(C) : new Ext.Toolbar.Button(C)
  }
  var F = this.nextBlock();
  A.render(F);
  this.items.add(A);
  return A
},addText:function(A)
{
  return this.addItem(new Ext.Toolbar.TextItem(A))
},insertButton:function(B, E)
{
  if (E instanceof Array)
  {
    var D = [];
    for (var C = 0,A = E.length; C < A; C++)
    {
      D.push(this.insertButton(B + C, E[C]))
    }
    return D
  }
  if (!(E instanceof Ext.Toolbar.Button))
  {
    E = new Ext.Toolbar.Button(E)
  }
  var F = document.createElement("td");
  this.tr.insertBefore(F, this.tr.childNodes[B]);
  E.render(F);
  this.items.insert(B, E);
  return E
},addDom:function(B, A)
{
  var D = this.nextBlock();
  Ext.DomHelper.overwrite(D, B);
  var C = new Ext.Toolbar.Item(D.firstChild);
  C.render(D);
  this.items.add(C);
  return C
},addField:function(B)
{
  var C = this.nextBlock();
  B.render(C);
  var A = new Ext.Toolbar.Item(C.firstChild);
  A.render(C);
  this.items.add(A);
  return A
},nextBlock:function()
{
  var A = document.createElement("td");
  this.tr.appendChild(A);
  return A
},destroy:function()
{
  if (this.items)
  {
    Ext.destroy.apply(Ext, this.items.items)
  }
  Ext.Element.uncache(this.el, this.tr)
}};
Ext.Toolbar.Item = function(A)
{
  this.el = Ext.getDom(A);
  this.id = Ext.id(this.el);
  this.hidden = false
};
Ext.Toolbar.Item.prototype = {getEl:function()
{
  return this.el
},render:function(A)
{
  this.td = A;
  A.appendChild(this.el)
},destroy:function()
{
  this.td.parentNode.removeChild(this.td)
},show:function()
{
  this.hidden = false;
  this.td.style.display = ""
},hide:function()
{
  this.hidden = true;
  this.td.style.display = "none"
},setVisible:function(A)
{
  if (A)
  {
    this.show()
  } else
  {
    this.hide()
  }
},focus:function()
{
  Ext.fly(this.el).focus()
},disable:function()
{
  Ext.fly(this.td).addClass("x-item-disabled");
  this.disabled = true;
  this.el.disabled = true
},enable:function()
{
  Ext.fly(this.td).removeClass("x-item-disabled");
  this.disabled = false;
  this.el.disabled = false
}};
Ext.Toolbar.Separator = function()
{
  var A = document.createElement("span");
  A.className = "ytb-sep";
  Ext.Toolbar.Separator.superclass.constructor.call(this, A)
};
Ext.extend(Ext.Toolbar.Separator, Ext.Toolbar.Item, {enable:Ext.emptyFn,disable:Ext.emptyFn,focus:Ext.emptyFn});
Ext.Toolbar.Spacer = function()
{
  var A = document.createElement("div");
  A.className = "ytb-spacer";
  Ext.Toolbar.Spacer.superclass.constructor.call(this, A)
};
Ext.extend(Ext.Toolbar.Spacer, Ext.Toolbar.Item, {enable:Ext.emptyFn,disable:Ext.emptyFn,focus:Ext.emptyFn});
Ext.Toolbar.Fill = Ext.extend(Ext.Toolbar.Spacer, {render:function(A)
{
  A.style.width = "100%";
  Ext.Toolbar.Fill.superclass.render.call(this, A)
}});
Ext.Toolbar.TextItem = function(B)
{
  var A = document.createElement("span");
  A.className = "ytb-text";
  A.innerHTML = B;
  Ext.Toolbar.TextItem.superclass.constructor.call(this, A)
};
Ext.extend(Ext.Toolbar.TextItem, Ext.Toolbar.Item, {enable:Ext.emptyFn,disable:Ext.emptyFn,focus:Ext.emptyFn});
Ext.Toolbar.Button = function(A)
{
  Ext.Toolbar.Button.superclass.constructor.call(this, null, A)
};
Ext.extend(Ext.Toolbar.Button, Ext.Button, {render:function(A)
{
  this.td = A;
  Ext.Toolbar.Button.superclass.render.call(this, A)
},destroy:function()
{
  Ext.Toolbar.Button.superclass.destroy.call(this);
  this.td.parentNode.removeChild(this.td)
},show:function()
{
  this.hidden = false;
  this.td.style.display = ""
},hide:function()
{
  this.hidden = true;
  this.td.style.display = "none"
},disable:function()
{
  Ext.fly(this.td).addClass("x-item-disabled");
  this.disabled = true
},enable:function()
{
  Ext.fly(this.td).removeClass("x-item-disabled");
  this.disabled = false
}});
Ext.ToolbarButton = Ext.Toolbar.Button;
Ext.Toolbar.SplitButton = function(A)
{
  Ext.Toolbar.SplitButton.superclass.constructor.call(this, null, A)
};
Ext.extend(Ext.Toolbar.SplitButton, Ext.SplitButton, {render:function(A)
{
  this.td = A;
  Ext.Toolbar.SplitButton.superclass.render.call(this, A)
},destroy:function()
{
  Ext.Toolbar.SplitButton.superclass.destroy.call(this);
  this.td.parentNode.removeChild(this.td)
},show:function()
{
  this.hidden = false;
  this.td.style.display = ""
},hide:function()
{
  this.hidden = true;
  this.td.style.display = "none"
}});
Ext.Toolbar.MenuButton = Ext.Toolbar.SplitButton;
Ext.PagingToolbar = function(B, C, A)
{
  Ext.PagingToolbar.superclass.constructor.call(this, B, null, A);
  this.ds = C;
  this.cursor = 0;
  this.renderButtons(this.el);
  this.bind(C)
};
Ext.extend(Ext.PagingToolbar, Ext.Toolbar, {pageSize:20,displayMsg:"Displaying {0} - {1} of {2}",emptyMsg:"No data to display",beforePageText:"Page",afterPageText:"of {0}",firstText:"First Page",prevText:"Previous Page",nextText:"Next Page",lastText:"Last Page",refreshText:"Refresh",renderButtons:function(A)
{
  Ext.PagingToolbar.superclass.render.call(this, A);
  this.first = this.addButton({tooltip:this.firstText,cls:"x-btn-icon x-grid-page-first",disabled:true,handler:this.onClick.createDelegate(this, ["first"])});
  this.prev = this.addButton({tooltip:this.prevText,cls:"x-btn-icon x-grid-page-prev",disabled:true,handler:this.onClick.createDelegate(this, ["prev"])});
  this.addSeparator();
  this.add(this.beforePageText);
  this.field = Ext.get(this.addDom({tag:"input",type:"text",size:"3",value:"1",cls:"x-grid-page-number"}).el);
  this.field.on("keydown", this.onPagingKeydown, this);
  this.field.on("focus", function()
  {
    this.dom.select()
  });
  this.afterTextEl = this.addText(String.format(this.afterPageText, 1));
  this.field.setHeight(18);
  this.addSeparator();
  this.next = this.addButton({tooltip:this.nextText,cls:"x-btn-icon x-grid-page-next",disabled:true,handler:this.onClick.createDelegate(this, ["next"])});
  this.last = this.addButton({tooltip:this.lastText,cls:"x-btn-icon x-grid-page-last",disabled:true,handler:this.onClick.createDelegate(this, ["last"])});
  this.addSeparator();
  this.loading = this.addButton({tooltip:this.refreshText,cls:"x-btn-icon x-grid-loading",handler:this.onClick.createDelegate(this, ["refresh"])});
  if (this.displayInfo)
  {
    this.displayEl = Ext.fly(this.el.dom.firstChild).createChild({cls:"x-paging-info"})
  }
},updateInfo:function()
{
  if (this.displayEl)
  {
    var A = this.ds.getCount();
    var B = A == 0 ? this.emptyMsg : String.format(this.displayMsg, this.cursor + 1, this.cursor + A, this.ds.getTotalCount());
    this.displayEl.update(B)
  }
},onLoad:function(C, B, F)
{
  this.cursor = F.params ? F.params.start : 0;
  var E = this.getPageData(),A = E.activePage,D = E.pages;
  this.afterTextEl.el.innerHTML = String.format(this.afterPageText, E.pages);
  this.field.dom.value = A;
  this.first.setDisabled(A == 1);
  this.prev.setDisabled(A == 1);
  this.next.setDisabled(A == D);
  this.last.setDisabled(A == D);
  this.loading.enable();
  this.updateInfo()
},getPageData:function()
{
  var A = this.ds.getTotalCount();
  return{total:A,activePage:Math.ceil((this.cursor + this.pageSize) / this.pageSize),pages:A < this.pageSize ? 1 : Math.ceil(A / this.pageSize)}
},onLoadError:function()
{
  this.loading.enable()
},onPagingKeydown:function(E)
{
  var C = E.getKey();
  var F = this.getPageData();
  if (C == E.RETURN)
  {
    var B = this.field.dom.value,D;
    if (!B || isNaN(D = parseInt(B, 10)))
    {
      this.field.dom.value = F.activePage;
      return
    }
    D = Math.min(Math.max(1, D), F.pages) - 1;
    this.ds.load({params:{start:D * this.pageSize,limit:this.pageSize}});
    E.stopEvent()
  } else
  {
    if (C == E.HOME || (C == E.UP && E.ctrlKey) || (C == E.PAGEUP && E.ctrlKey) || (C == E.RIGHT && E.ctrlKey) || C == E.END || (C == E.DOWN && E.ctrlKey) || (C == E.LEFT && E.ctrlKey) || (C == E.PAGEDOWN && E.ctrlKey))
    {
      var D = (C == E.HOME || (C == E.DOWN && E.ctrlKey) || (C == E.LEFT && E.ctrlKey) || (C == E.PAGEDOWN && E.ctrlKey)) ? 1 : F.pages;
      this.field.dom.value = D;
      this.ds.load({params:{start:(D - 1) * this.pageSize,limit:this.pageSize}});
      E.stopEvent()
    } else
    {
      if (C == E.UP || C == E.RIGHT || C == E.PAGEUP || C == E.DOWN || C == E.LEFT || C == E.PAGEDOWN)
      {
        var B = this.field.dom.value,D;
        var A = (E.shiftKey) ? 10 : 1;
        if (C == E.DOWN || C == E.LEFT || C == E.PAGEDOWN)
        {
          A *= -1
        }
        if (!B || isNaN(D = parseInt(B, 10)))
        {
          this.field.dom.value = F.activePage;
          return
        } else
        {
          if (parseInt(B, 10) + A >= 1 & parseInt(B, 10) + A <= F.pages)
          {
            this.field.dom.value = parseInt(B, 10) + A;
            D = Math.min(Math.max(1, D + A), F.pages) - 1;
            this.ds.load({params:{start:D * this.pageSize,limit:this.pageSize}})
          }
        }
        E.stopEvent()
      }
    }
  }
},beforeLoad:function()
{
  if (this.loading)
  {
    this.loading.disable()
  }
},onClick:function(E)
{
  var D = this.ds;
  switch (E)
      {case"first":D.load({params:{start:0,limit:this.pageSize}});break;case"prev":D.load({params:{start:Math.max(0, this.cursor - this.pageSize),limit:this.pageSize}});break;case"next":D.load({params:{start:this.cursor + this.pageSize,limit:this.pageSize}});break;case"last":var C = D.getTotalCount();var A = C % this.pageSize;var B = A ? (C - A) : C - this.pageSize;D.load({params:{start:B,limit:this.pageSize}});break;case"refresh":D.load({params:{start:this.cursor,limit:this.pageSize}});break}
},unbind:function(A)
{
  A.un("beforeload", this.beforeLoad, this);
  A.un("load", this.onLoad, this);
  A.un("loadexception", this.onLoadError, this);
  this.ds = undefined
},bind:function(A)
{
  A.on("beforeload", this.beforeLoad, this);
  A.on("load", this.onLoad, this);
  A.on("loadexception", this.onLoadError, this);
  this.ds = A
}});
Ext.Resizable = function(D, E)
{
  this.el = Ext.get(D);
  if (E && E.wrap)
  {
    E.resizeChild = this.el;
    this.el = this.el.wrap(typeof E.wrap == "object" ? E.wrap : {cls:"xresizable-wrap"});
    this.el.id = this.el.dom.id = E.resizeChild.id + "-rzwrap";
    this.el.setStyle("overflow", "hidden");
    this.el.setPositioning(E.resizeChild.getPositioning());
    E.resizeChild.clearPositioning();
    if (!E.width || !E.height)
    {
      var F = E.resizeChild.getSize();
      this.el.setSize(F.width, F.height)
    }
    if (E.pinned && !E.adjustments)
    {
      E.adjustments = "auto"
    }
  }
  this.proxy = this.el.createProxy({tag:"div",cls:"x-resizable-proxy",id:this.el.id + "-rzproxy"});
  this.proxy.unselectable();
  this.proxy.enableDisplayMode("block");
  Ext.apply(this, E);
  if (this.pinned)
  {
    this.disableTrackOver = true;
    this.el.addClass("x-resizable-pinned")
  }
  var I = this.el.getStyle("position");
  if (I != "absolute" && I != "fixed")
  {
    this.el.setStyle("position", "relative")
  }
  if (!this.handles)
  {
    this.handles = "s,e,se";
    if (this.multiDirectional)
    {
      this.handles += ",n,w"
    }
  }
  if (this.handles == "all")
  {
    this.handles = "n s e w ne nw se sw"
  }
  var M = this.handles.split(/\s*?[,;]\s*?| /);
  var C = Ext.Resizable.positions;
  for (var H = 0,J = M.length; H < J; H++)
  {
    if (M[H] && C[M[H]])
    {
      var L = C[M[H]];
      this[L] = new Ext.Resizable.Handle(this, L, this.disableTrackOver, this.transparent)
    }
  }
  this.corner = this.southeast;
  if (this.handles.indexOf("n") != -1 || this.handles.indexOf("w") != -1)
  {
    this.updateBox = true
  }
  this.activeHandle = null;
  if (this.resizeChild)
  {
    if (typeof this.resizeChild == "boolean")
    {
      this.resizeChild = Ext.get(this.el.dom.firstChild, true)
    } else
    {
      this.resizeChild = Ext.get(this.resizeChild, true)
    }
  }
  if (this.adjustments == "auto")
  {
    var B = this.resizeChild;
    var K = this.west,G = this.east,A = this.north,M = this.south;
    if (B && (K || A))
    {
      B.position("relative");
      B.setLeft(K ? K.el.getWidth() : 0);
      B.setTop(A ? A.el.getHeight() : 0)
    }
    this.adjustments = [(G ? -G.el.getWidth() : 0) + (K ? -K.el.getWidth() : 0),(A ? -A.el.getHeight() : 0) + (M ? -M.el.getHeight() : 0) - 1]
  }
  if (this.draggable)
  {
    this.dd = this.dynamic ? this.el.initDD(null) : this.el.initDDProxy(null, {dragElId:this.proxy.id});
    this.dd.setHandleElId(this.resizeChild ? this.resizeChild.id : this.el.id)
  }
  this.addEvents({"beforeresize":true,"resize":true});
  if (this.width !== null && this.height !== null)
  {
    this.resizeTo(this.width, this.height)
  } else
  {
    this.updateChildSize()
  }
  if (Ext.isIE)
  {
    this.el.dom.style.zoom = 1
  }
  Ext.Resizable.superclass.constructor.call(this)
};
Ext.extend(Ext.Resizable, Ext.util.Observable, {resizeChild:false,adjustments:[0,0],minWidth:5,minHeight:5,maxWidth:10000,maxHeight:10000,enabled:true,animate:false,duration:0.35,dynamic:false,handles:false,multiDirectional:false,disableTrackOver:false,easing:"easeOutStrong",widthIncrement:0,heightIncrement:0,pinned:false,width:null,height:null,preserveRatio:false,transparent:false,minX:0,minY:0,draggable:false,constrainTo:undefined,resizeRegion:undefined,resizeTo:function(B, A)
{
  this.el.setSize(B, A);
  this.updateChildSize();
  this.fireEvent("resize", this, B, A, null)
},startSizing:function(C, B)
{
  this.fireEvent("beforeresize", this, C);
  if (this.enabled)
  {
    if (!this.overlay)
    {
      this.overlay = this.el.createProxy({tag:"div",cls:"x-resizable-overlay",html:"&#160;"});
      this.overlay.unselectable();
      this.overlay.enableDisplayMode("block");
      this.overlay.on("mousemove", this.onMouseMove, this);
      this.overlay.on("mouseup", this.onMouseUp, this)
    }
    this.overlay.setStyle("cursor", B.el.getStyle("cursor"));
    this.resizing = true;
    this.startBox = this.el.getBox();
    this.startPoint = C.getXY();
    this.offsets = [(this.startBox.x + this.startBox.width) - this.startPoint[0],(this.startBox.y + this.startBox.height) - this.startPoint[1]];
    this.overlay.setSize(Ext.lib.Dom.getViewWidth(true), Ext.lib.Dom.getViewHeight(true));
    this.overlay.show();
    if (this.constrainTo)
    {
      var A = Ext.get(this.constrainTo);
      this.resizeRegion = A.getRegion().adjust(A.getFrameWidth("t"), A.getFrameWidth("l"), -A.getFrameWidth("b"), -A.getFrameWidth("r"))
    }
    this.proxy.setStyle("visibility", "hidden");
    this.proxy.show();
    this.proxy.setBox(this.startBox);
    if (!this.dynamic)
    {
      this.proxy.setStyle("visibility", "visible")
    }
  }
},onMouseDown:function(A, B)
{
  if (this.enabled)
  {
    B.stopEvent();
    this.activeHandle = A;
    this.startSizing(B, A)
  }
},onMouseUp:function(B)
{
  var A = this.resizeElement();
  this.resizing = false;
  this.handleOut();
  this.overlay.hide();
  this.proxy.hide();
  this.fireEvent("resize", this, A.width, A.height, B)
},updateChildSize:function()
{
  if (this.resizeChild)
  {
    var C = this.el;
    var D = this.resizeChild;
    var B = this.adjustments;
    if (C.dom.offsetWidth)
    {
      var A = C.getSize(true);
      D.setSize(A.width + B[0], A.height + B[1])
    }
    if (Ext.isIE)
    {
      setTimeout(function()
      {
        if (C.dom.offsetWidth)
        {
          var E = C.getSize(true);
          D.setSize(E.width + B[0], E.height + B[1])
        }
      }, 10)
    }
  }
},snap:function(C, E, B)
{
  if (!E || !C)
  {
    return C
  }
  var D = C;
  var A = C % E;
  if (A > 0)
  {
    if (A > (E / 2))
    {
      D = C + (E - A)
    } else
    {
      D = C - A
    }
  }
  return Math.max(B, D)
},resizeElement:function()
{
  var A = this.proxy.getBox();
  if (this.updateBox)
  {
    this.el.setBox(A, false, this.animate, this.duration, null, this.easing)
  } else
  {
    this.el.setSize(A.width, A.height, this.animate, this.duration, null, this.easing)
  }
  this.updateChildSize();
  if (!this.dynamic)
  {
    this.proxy.hide()
  }
  return A
},constrain:function(B, C, A, D)
{
  if (B - C < A)
  {
    C = B - A
  } else
  {
    if (B - C > D)
    {
      C = D - B
    }
  }
  return C
},onMouseMove:function(S)
{
  if (this.enabled)
  {
    try
    {
      if (this.resizeRegion && !this.resizeRegion.contains(S.getPoint()))
      {
        return
      }
      var Q = this.curSize || this.startBox;
      var I = this.startBox.x,H = this.startBox.y;
      var C = I,B = H;
      var J = Q.width,R = Q.height;
      var D = J,L = R;
      var K = this.minWidth,T = this.minHeight;
      var P = this.maxWidth,W = this.maxHeight;
      var F = this.widthIncrement;
      var A = this.heightIncrement;
      var U = S.getXY();
      var O = -(this.startPoint[0] - Math.max(this.minX, U[0]));
      var M = -(this.startPoint[1] - Math.max(this.minY, U[1]));
      var G = this.activeHandle.position;
      switch (G)
          {case"east":J += O;J = Math.min(Math.max(K, J), P);break;case"south":R += M;R = Math.min(Math.max(T, R), W);break;case"southeast":J += O;R += M;J = Math.min(Math.max(K, J), P);R = Math.min(Math.max(T, R), W);break;case"north":M = this.constrain(R, M, T, W);H += M;R -= M;break;case"west":O = this.constrain(J, O, K, P);I += O;J -= O;break;case"northeast":J += O;J = Math.min(Math.max(K, J), P);M = this.constrain(R, M, T, W);H += M;R -= M;break;case"northwest":O = this.constrain(J, O, K, P);M = this.constrain(R, M, T, W);H += M;R -= M;I += O;J -= O;break;case"southwest":O = this.constrain(J, O, K, P);R += M;R = Math.min(Math.max(T, R), W);I += O;J -= O;break}
      var N = this.snap(J, F, K);
      var V = this.snap(R, A, T);
      if (N != J || V != R)
      {
        switch (G)
            {case"northeast":H -= V - R;break;case"north":H -= V - R;break;case"southwest":I -= N - J;break;case"west":I -= N - J;break;case"northwest":I -= N - J;H -= V - R;break}
        J = N;
        R = V
      }
      if (this.preserveRatio)
      {
        switch (G)
            {case"southeast":case"east":R = L * (J / D);R = Math.min(Math.max(T, R), W);J = D * (R / L);break;case"south":J = D * (R / L);J = Math.min(Math.max(K, J), P);R = L * (J / D);break;case"northeast":J = D * (R / L);J = Math.min(Math.max(K, J), P);R = L * (J / D);break;case"north":var X = J;J = D * (R / L);J = Math.min(Math.max(K, J), P);R = L * (J / D);I += (X - J) / 2;break;case"southwest":R = L * (J / D);R = Math.min(Math.max(T, R), W);var X = J;J = D * (R / L);I += X - J;break;case"west":var E = R;R = L * (J / D);R = Math.min(Math.max(T, R), W);H += (E - R) / 2;var X = J;J = D * (R / L);I += X - J;break;case"northwest":var X = J;var E = R;R = L * (J / D);R = Math.min(Math.max(T, R), W);J = D * (R / L);H += E - R;I += X - J;break}
      }
      this.proxy.setBounds(I, H, J, R);
      if (this.dynamic)
      {
        this.resizeElement()
      }
    } catch(S)
    {
    }
  }
},handleOver:function()
{
  if (this.enabled)
  {
    this.el.addClass("x-resizable-over")
  }
},handleOut:function()
{
  if (!this.resizing)
  {
    this.el.removeClass("x-resizable-over")
  }
},getEl:function()
{
  return this.el
},getResizeChild:function()
{
  return this.resizeChild
},destroy:function(C)
{
  this.proxy.remove();
  if (this.overlay)
  {
    this.overlay.removeAllListeners();
    this.overlay.remove()
  }
  var D = Ext.Resizable.positions;
  for (var A in D)
  {
    if (typeof D[A] != "function" && this[D[A]])
    {
      var B = this[D[A]];
      B.el.removeAllListeners();
      B.el.remove()
    }
  }
  if (C)
  {
    this.el.update("");
    this.el.remove()
  }
}});
Ext.Resizable.positions = {n:"north",s:"south",e:"east",w:"west",se:"southeast",sw:"southwest",nw:"northwest",ne:"northeast"};
Ext.Resizable.Handle = function(C, E, B, D)
{
  if (!this.tpl)
  {
    var A = Ext.DomHelper.createTemplate({tag:"div",cls:"x-resizable-handle x-resizable-handle-{0}"});
    A.compile();
    Ext.Resizable.Handle.prototype.tpl = A
  }
  this.position = E;
  this.rz = C;
  this.el = this.tpl.append(C.el.dom, [this.position], true);
  this.el.unselectable();
  if (D)
  {
    this.el.setOpacity(0)
  }
  this.el.on("mousedown", this.onMouseDown, this);
  if (!B)
  {
    this.el.on("mouseover", this.onMouseOver, this);
    this.el.on("mouseout", this.onMouseOut, this)
  }
};
Ext.Resizable.Handle.prototype = {afterResize:function(A)
{
},onMouseDown:function(A)
{
  this.rz.onMouseDown(this, A)
},onMouseOver:function(A)
{
  this.rz.handleOver(this, A)
},onMouseOut:function(A)
{
  this.rz.handleOut(this, A)
}};
Ext.Editor = function(B, A)
{
  Ext.Editor.superclass.constructor.call(this, A);
  this.field = B;
  this.addEvents({"beforestartedit":true,"startedit":true,"beforecomplete":true,"complete":true,"specialkey":true})
};
Ext.extend(Ext.Editor, Ext.Component, {value:"",alignment:"c-c?",shadow:"frame",constrain:false,completeOnEnter:false,cancelOnEsc:false,updateEl:false,onRender:function(B, A)
{
  this.el = new Ext.Layer({shadow:this.shadow,cls:"x-editor",parentEl:B,shim:this.shim,shadowOffset:4,id:this.id,constrain:this.constrain});
  this.el.setStyle("overflow", Ext.isGecko ? "auto" : "hidden");
  if (this.field.msgTarget != "title")
  {
    this.field.msgTarget = "qtip"
  }
  this.field.render(this.el);
  if (Ext.isGecko)
  {
    this.field.el.dom.setAttribute("autocomplete", "off")
  }
  this.field.on("specialkey", this.onSpecialKey, this);
  if (this.swallowKeys)
  {
    this.field.el.swallowEvent(["keydown","keypress"])
  }
  this.field.show();
  this.field.on("blur", this.onBlur, this);
  if (this.field.grow)
  {
    this.field.on("autosize", this.el.sync, this.el, {delay:1})
  }
},onSpecialKey:function(B, A)
{
  if (this.completeOnEnter && A.getKey() == A.ENTER)
  {
    A.stopEvent();
    this.completeEdit()
  } else
  {
    if (this.cancelOnEsc && A.getKey() == A.ESC)
    {
      this.cancelEdit()
    } else
    {
      this.fireEvent("specialkey", B, A)
    }
  }
},startEdit:function(B, C)
{
  if (this.editing)
  {
    this.completeEdit()
  }
  this.boundEl = Ext.get(B);
  var A = C !== undefined ? C : this.boundEl.dom.innerHTML;
  if (!this.rendered)
  {
    this.render(this.parentEl || document.body)
  }
  if (this.fireEvent("beforestartedit", this, this.boundEl, A) === false)
  {
    return
  }
  this.startValue = A;
  this.field.setValue(A);
  if (this.autoSize)
  {
    var D = this.boundEl.getSize();
    switch (this.autoSize)
        {case"width":this.setSize(D.width, "");break;case"height":this.setSize("", D.height);break;default:this.setSize(D.width, D.height)}
  }
  this.el.alignTo(this.boundEl, this.alignment);
  this.editing = true;
  if (Ext.QuickTips)
  {
    Ext.QuickTips.disable()
  }
  this.show()
},setSize:function(A, B)
{
  this.field.setSize(A, B);
  if (this.el)
  {
    this.el.sync()
  }
},realign:function()
{
  this.el.alignTo(this.boundEl, this.alignment)
},completeEdit:function(A)
{
  if (!this.editing)
  {
    return
  }
  var B = this.getValue();
  if (this.revertInvalid !== false && !this.field.isValid())
  {
    B = this.startValue;
    this.cancelEdit(true)
  }
  if (String(B) === String(this.startValue) && this.ignoreNoChange)
  {
    this.editing = false;
    this.hide();
    return
  }
  if (this.fireEvent("beforecomplete", this, B, this.startValue) !== false)
  {
    this.editing = false;
    if (this.updateEl && this.boundEl)
    {
      this.boundEl.update(B)
    }
    if (A !== true)
    {
      this.hide()
    }
    this.fireEvent("complete", this, B, this.startValue)
  }
},onShow:function()
{
  this.el.show();
  if (this.hideEl !== false)
  {
    this.boundEl.hide()
  }
  this.field.show();
  if (Ext.isIE && !this.fixIEFocus)
  {
    this.fixIEFocus = true;
    this.deferredFocus.defer(50, this)
  } else
  {
    this.field.focus()
  }
  this.fireEvent("startedit", this.boundEl, this.startValue)
},deferredFocus:function()
{
  if (this.editing)
  {
    this.field.focus()
  }
},cancelEdit:function(A)
{
  if (this.editing)
  {
    this.setValue(this.startValue);
    if (A !== true)
    {
      this.hide()
    }
  }
},onBlur:function()
{
  if (this.allowBlur !== true && this.editing)
  {
    this.completeEdit()
  }
},onHide:function()
{
  if (this.editing)
  {
    this.completeEdit();
    return
  }
  this.field.blur();
  if (this.field.collapse)
  {
    this.field.collapse()
  }
  this.el.hide();
  if (this.hideEl !== false)
  {
    this.boundEl.show()
  }
  if (Ext.QuickTips)
  {
    Ext.QuickTips.enable()
  }
},setValue:function(A)
{
  this.field.setValue(A)
},getValue:function()
{
  return this.field.getValue()
}});
Ext.BasicDialog = function(C, B)
{
  this.el = Ext.get(C);
  var D = Ext.DomHelper;
  if (!this.el && B && B.autoCreate)
  {
    if (typeof B.autoCreate == "object")
    {
      if (!B.autoCreate.id)
      {
        B.autoCreate.id = C
      }
      this.el = D.append(document.body, B.autoCreate, true)
    } else
    {
      this.el = D.append(document.body, {tag:"div",id:C,style:"visibility:hidden;"}, true)
    }
  }
  C = this.el;
  C.setDisplayed(true);
  C.hide = this.hideAction;
  this.id = C.id;
  C.addClass("x-dlg");
  Ext.apply(this, B);
  this.proxy = C.createProxy("x-dlg-proxy");
  this.proxy.hide = this.hideAction;
  this.proxy.setOpacity(0.5);
  this.proxy.hide();
  if (B.width)
  {
    C.setWidth(B.width)
  }
  if (B.height)
  {
    C.setHeight(B.height)
  }
  this.size = C.getSize();
  if (typeof B.x != "undefined" && typeof B.y != "undefined")
  {
    this.xy = [B.x,B.y]
  } else
  {
    this.xy = C.getCenterXY(true)
  }
  this.header = C.child("> .x-dlg-hd");
  this.body = C.child("> .x-dlg-bd");
  this.footer = C.child("> .x-dlg-ft");
  if (!this.header)
  {
    this.header = C.createChild({tag:"div",cls:"x-dlg-hd",html:"&#160;"}, this.body ? this.body.dom : null)
  }
  if (!this.body)
  {
    this.body = C.createChild({tag:"div",cls:"x-dlg-bd"})
  }
  this.header.unselectable();
  if (this.title)
  {
    this.header.update(this.title)
  }
  this.focusEl = C.createChild({tag:"a",href:"#",cls:"x-dlg-focus",tabIndex:"-1"});
  this.focusEl.swallowEvent("click", true);
  this.header.wrap({cls:"x-dlg-hd-right"}).wrap({cls:"x-dlg-hd-left"}, true);
  this.bwrap = this.body.wrap({tag:"div",cls:"x-dlg-dlg-body"});
  if (this.footer)
  {
    this.bwrap.dom.appendChild(this.footer.dom)
  }
  this.bg = this.el.createChild({tag:"div",cls:"x-dlg-bg",html:"<div class=\"x-dlg-bg-left\"><div class=\"x-dlg-bg-right\"><div class=\"x-dlg-bg-center\">&#160;</div></div></div>"});
  this.centerBg = this.bg.child("div.x-dlg-bg-center");
  if (this.autoScroll !== false && !this.autoTabs)
  {
    this.body.setStyle("overflow", "auto")
  }
  this.toolbox = this.el.createChild({cls:"x-dlg-toolbox"});
  if (this.closable !== false)
  {
    this.el.addClass("x-dlg-closable");
    this.close = this.toolbox.createChild({cls:"x-dlg-close"});
    this.close.on("click", this.closeClick, this);
    this.close.addClassOnOver("x-dlg-close-over")
  }
  if (this.collapsible !== false)
  {
    this.collapseBtn = this.toolbox.createChild({cls:"x-dlg-collapse"});
    this.collapseBtn.on("click", this.collapseClick, this);
    this.collapseBtn.addClassOnOver("x-dlg-collapse-over");
    this.header.on("dblclick", this.collapseClick, this)
  }
  if (this.resizable !== false)
  {
    this.el.addClass("x-dlg-resizable");
    this.resizer = new Ext.Resizable(C, {minWidth:this.minWidth || 80,minHeight:this.minHeight || 80,handles:this.resizeHandles || "all",pinned:true});
    this.resizer.on("beforeresize", this.beforeResize, this);
    this.resizer.on("resize", this.onResize, this)
  }
  if (this.draggable !== false)
  {
    C.addClass("x-dlg-draggable");
    if (!this.proxyDrag)
    {
      var A = new Ext.dd.DD(C.dom.id, "WindowDrag")
    } else
    {
      var A = new Ext.dd.DDProxy(C.dom.id, "WindowDrag", {dragElId:this.proxy.id})
    }
    A.setHandleElId(this.header.id);
    A.endDrag = this.endMove.createDelegate(this);
    A.startDrag = this.startMove.createDelegate(this);
    A.onDrag = this.onDrag.createDelegate(this);
    A.scroll = false;
    this.dd = A
  }
  if (this.modal)
  {
    this.mask = D.append(document.body, {tag:"div",cls:"x-dlg-mask"}, true);
    this.mask.enableDisplayMode("block");
    this.mask.hide();
    this.el.addClass("x-dlg-modal")
  }
  if (this.shadow)
  {
    this.shadow = new Ext.Shadow({mode:typeof this.shadow == "string" ? this.shadow : "sides",offset:this.shadowOffset})
  } else
  {
    this.shadowOffset = 0
  }
  if (Ext.useShims && this.shim !== false)
  {
    this.shim = this.el.createShim();
    this.shim.hide = this.hideAction;
    this.shim.hide()
  } else
  {
    this.shim = false
  }
  if (this.autoTabs)
  {
    this.initTabs()
  }
  this.addEvents({"keydown":true,"move":true,"resize":true,"beforehide":true,"hide":true,"beforeshow":true,"show":true});
  C.on("keydown", this.onKeyDown, this);
  C.on("mousedown", this.toFront, this);
  Ext.EventManager.onWindowResize(this.adjustViewport, this, true);
  this.el.hide();
  Ext.DialogManager.register(this);
  Ext.BasicDialog.superclass.constructor.call(this)
};
Ext.extend(Ext.BasicDialog, Ext.util.Observable, {shadowOffset:Ext.isIE ? 6 : 5,minHeight:80,minWidth:200,minButtonWidth:75,defaultButton:null,buttonAlign:"right",tabTag:"div",firstShow:true,setTitle:function(A)
{
  this.header.update(A);
  return this
},closeClick:function()
{
  this.hide()
},collapseClick:function()
{
  this[this.collapsed ? "expand" : "collapse"]()
},collapse:function()
{
  if (!this.collapsed)
  {
    this.collapsed = true;
    this.el.addClass("x-dlg-collapsed");
    this.restoreHeight = this.el.getHeight();
    this.resizeTo(this.el.getWidth(), this.header.getHeight())
  }
},expand:function()
{
  if (this.collapsed)
  {
    this.collapsed = false;
    this.el.removeClass("x-dlg-collapsed");
    this.resizeTo(this.el.getWidth(), this.restoreHeight)
  }
},initTabs:function()
{
  var A = this.getTabs();
  while (A.getTab(0))
  {
    A.removeTab(0)
  }
  this.el.select(this.tabTag + ".x-dlg-tab").each(function(B)
  {
    var C = B.dom;
    A.addTab(Ext.id(C), C.title);
    C.title = ""
  });
  A.activate(0);
  return A
},beforeResize:function()
{
  this.resizer.minHeight = Math.max(this.minHeight, this.getHeaderFooterHeight(true) + 40)
},onResize:function()
{
  this.refreshSize();
  this.syncBodyHeight();
  this.adjustAssets();
  this.focus();
  this.fireEvent("resize", this, this.size.width, this.size.height)
},onKeyDown:function(A)
{
  if (this.isVisible())
  {
    this.fireEvent("keydown", this, A)
  }
},resizeTo:function(B, A)
{
  this.el.setSize(B, A);
  this.size = {width:B,height:A};
  this.syncBodyHeight();
  if (this.fixedcenter)
  {
    this.center()
  }
  if (this.isVisible())
  {
    this.constrainXY();
    this.adjustAssets()
  }
  this.fireEvent("resize", this, B, A);
  return this
},setContentSize:function(A, B)
{
  B += this.getHeaderFooterHeight() + this.body.getMargins("tb");
  A += this.body.getMargins("lr") + this.bwrap.getMargins("lr") + this.centerBg.getPadding("lr");
  B += this.body.getPadding("tb") + this.bwrap.getBorderWidth("tb") + this.body.getBorderWidth("tb") + this.el.getBorderWidth("tb");
  A += this.body.getPadding("lr") + this.bwrap.getBorderWidth("lr") + this.body.getBorderWidth("lr") + this.bwrap.getPadding("lr") + this.el.getBorderWidth("lr");
  if (this.tabs)
  {
    B += this.tabs.stripWrap.getHeight() + this.tabs.bodyEl.getMargins("tb") + this.tabs.bodyEl.getPadding("tb");
    A += this.tabs.bodyEl.getMargins("lr") + this.tabs.bodyEl.getPadding("lr")
  }
  this.resizeTo(A, B);
  return this
},addKeyListener:function(B, E, D)
{
  var H,A,F,G;
  if (typeof B == "object" && !(B instanceof Array))
  {
    H = B["key"];
    A = B["shift"];
    F = B["ctrl"];
    G = B["alt"]
  } else
  {
    H = B
  }
  var C = function(M, L)
  {
    if ((!A || L.shiftKey) && (!F || L.ctrlKey) && (!G || L.altKey))
    {
      var J = L.getKey();
      if (H instanceof Array)
      {
        for (var K = 0,I = H.length; K < I; K++)
        {
          if (H[K] == J)
          {
            E.call(D || window, M, J, L);
            return
          }
        }
      } else
      {
        if (J == H)
        {
          E.call(D || window, M, J, L)
        }
      }
    }
  };
  this.on("keydown", C);
  return this
},getTabs:function()
{
  if (!this.tabs)
  {
    this.el.addClass("x-dlg-auto-tabs");
    this.body.addClass(this.tabPosition == "bottom" ? "x-tabs-bottom" : "x-tabs-top");
    this.tabs = new Ext.TabPanel(this.body.dom, this.tabPosition == "bottom")
  }
  return this.tabs
},addButton:function(B, F, E)
{
  var G = Ext.DomHelper;
  if (!this.footer)
  {
    this.footer = G.append(this.bwrap, {tag:"div",cls:"x-dlg-ft"}, true)
  }
  if (!this.btnContainer)
  {
    var A = this.footer.createChild({cls:"x-dlg-btns x-dlg-btns-" + this.buttonAlign,html:"<table cellspacing=\"0\"><tbody><tr></tr></tbody></table><div class=\"x-clear\"></div>"}, null, true);
    this.btnContainer = A.firstChild.firstChild.firstChild
  }
  var D = {handler:F,scope:E,minWidth:this.minButtonWidth,hideParent:true};
  if (typeof B == "string")
  {
    D.text = B
  } else
  {
    if (B.tag)
    {
      D.dhconfig = B
    } else
    {
      Ext.apply(D, B)
    }
  }
  var C = new Ext.Button(this.btnContainer.appendChild(document.createElement("td")), D);
  this.syncBodyHeight();
  if (!this.buttons)
  {
    this.buttons = []
  }
  this.buttons.push(C);
  return C
},setDefaultButton:function(A)
{
  this.defaultButton = A;
  return this
},getHeaderFooterHeight:function(C)
{
  var A = 0;
  if (this.header)
  {
    A += this.header.getHeight()
  }
  if (this.footer)
  {
    var B = this.footer.getMargins();
    A += (this.footer.getHeight() + B.top + B.bottom)
  }
  A += this.bwrap.getPadding("tb") + this.bwrap.getBorderWidth("tb");
  A += this.centerBg.getPadding("tb");
  return A
},syncBodyHeight:function()
{
  var E = this.body,B = this.centerBg,F = this.bwrap;
  var A = this.size.height - this.getHeaderFooterHeight(false);
  E.setHeight(A - E.getMargins("tb"));
  var C = this.header.getHeight();
  var D = this.size.height - C;
  B.setHeight(D);
  F.setLeftTop(B.getPadding("l"), C + B.getPadding("t"));
  F.setHeight(D - B.getPadding("tb"));
  F.setWidth(this.el.getWidth(true) - B.getPadding("lr"));
  E.setWidth(F.getWidth(true));
  if (this.tabs)
  {
    this.tabs.syncHeight();
    if (Ext.isIE)
    {
      this.tabs.el.repaint()
    }
  }
},restoreState:function()
{
  var A = Ext.state.Manager.get(this.stateId || (this.el.id + "-state"));
  if (A && A.width)
  {
    this.xy = [A.x,A.y];
    this.resizeTo(A.width, A.height)
  }
  return this
},beforeShow:function()
{
  this.expand();
  if (this.fixedcenter)
  {
    this.xy = this.el.getCenterXY(true)
  }
  if (this.modal)
  {
    Ext.get(document.body).addClass("x-body-masked");
    this.mask.setSize(Ext.lib.Dom.getViewWidth(true), Ext.lib.Dom.getViewHeight(true));
    this.mask.show()
  }
  this.constrainXY()
},animShow:function()
{
  var A = Ext.get(this.animateTarget, true).getBox();
  this.proxy.setSize(A.width, A.height);
  this.proxy.setLocation(A.x, A.y);
  this.proxy.show();
  this.proxy.setBounds(this.xy[0], this.xy[1], this.size.width, this.size.height, true, 0.35, this.showEl.createDelegate(this))
},show:function(A)
{
  if (this.fireEvent("beforeshow", this) === false)
  {
    return
  }
  if (this.syncHeightBeforeShow)
  {
    this.syncBodyHeight()
  } else
  {
    if (this.firstShow)
    {
      this.firstShow = false;
      this.syncBodyHeight()
    }
  }
  this.animateTarget = A || this.animateTarget;
  if (!this.el.isVisible())
  {
    this.beforeShow();
    if (this.animateTarget)
    {
      this.animShow()
    } else
    {
      this.showEl()
    }
  }
  return this
},showEl:function()
{
  this.proxy.hide();
  this.el.setXY(this.xy);
  this.el.show();
  this.adjustAssets(true);
  this.toFront();
  this.focus();
  if (Ext.isIE)
  {
    this.el.repaint()
  }
  this.fireEvent("show", this)
},focus:function()
{
  if (this.defaultButton)
  {
    this.defaultButton.focus()
  } else
  {
    this.focusEl.focus()
  }
},constrainXY:function()
{
  if (this.constraintoviewport !== false)
  {
    if (!this.viewSize)
    {
      if (this.container)
      {
        var E = this.container.getSize();
        this.viewSize = [E.width,E.height]
      } else
      {
        this.viewSize = [Ext.lib.Dom.getViewWidth(),Ext.lib.Dom.getViewHeight()]
      }
    }
    var E = Ext.get(this.container || document).getScroll();
    var A = this.xy[0],H = this.xy[1];
    var B = this.size.width,D = this.size.height;
    var F = this.viewSize[0],G = this.viewSize[1];
    var C = false;
    if (A + B > F + E.left)
    {
      A = F - B;
      C = true
    }
    if (H + D > G + E.top)
    {
      H = G - D;
      C = true
    }
    if (A < E.left)
    {
      A = E.left;
      C = true
    }
    if (H < E.top)
    {
      H = E.top;
      C = true
    }
    if (C)
    {
      this.xy = [A,H];
      if (this.isVisible())
      {
        this.el.setLocation(A, H);
        this.adjustAssets()
      }
    }
  }
},onDrag:function()
{
  if (!this.proxyDrag)
  {
    this.xy = this.el.getXY();
    this.adjustAssets()
  }
},adjustAssets:function(D)
{
  var A = this.xy[0],E = this.xy[1];
  var B = this.size.width,C = this.size.height;
  if (D === true)
  {
    if (this.shadow)
    {
      this.shadow.show(this.el)
    }
    if (this.shim)
    {
      this.shim.show()
    }
  }
  if (this.shadow && this.shadow.isVisible())
  {
    this.shadow.show(this.el)
  }
  if (this.shim && this.shim.isVisible())
  {
    this.shim.setBounds(A, E, B, C)
  }
},adjustViewport:function(A, B)
{
  if (!A || !B)
  {
    A = Ext.lib.Dom.getViewWidth();
    B = Ext.lib.Dom.getViewHeight()
  }
  this.viewSize = [A,B];
  if (this.modal && this.mask.isVisible())
  {
    this.mask.setSize(A, B);
    this.mask.setSize(Ext.lib.Dom.getViewWidth(true), Ext.lib.Dom.getViewHeight(true))
  }
  if (this.isVisible())
  {
    this.constrainXY()
  }
},destroy:function(C)
{
  if (this.isVisible())
  {
    this.animateTarget = null;
    this.hide()
  }
  Ext.EventManager.removeResizeListener(this.adjustViewport, this);
  if (this.tabs)
  {
    this.tabs.destroy(C)
  }
  Ext.destroy(this.shim, this.proxy, this.resizer, this.close, this.mask);
  if (this.dd)
  {
    this.dd.unreg()
  }
  if (this.buttons)
  {
    for (var B = 0,A = this.buttons.length; B < A; B++)
    {
      this.buttons[B].destroy()
    }
  }
  this.el.removeAllListeners();
  if (C === true)
  {
    this.el.update("");
    this.el.remove()
  }
  Ext.DialogManager.unregister(this)
},startMove:function()
{
  if (this.proxyDrag)
  {
    this.proxy.show()
  }
  if (this.constraintoviewport !== false)
  {
    this.dd.constrainTo(document.body, {right:this.shadowOffset,bottom:this.shadowOffset})
  }
},endMove:function()
{
  if (!this.proxyDrag)
  {
    Ext.dd.DD.prototype.endDrag.apply(this.dd, arguments)
  } else
  {
    Ext.dd.DDProxy.prototype.endDrag.apply(this.dd, arguments);
    this.proxy.hide()
  }
  this.refreshSize();
  this.adjustAssets();
  this.focus();
  this.fireEvent("move", this, this.xy[0], this.xy[1])
},toFront:function()
{
  Ext.DialogManager.bringToFront(this);
  return this
},toBack:function()
{
  Ext.DialogManager.sendToBack(this);
  return this
},center:function()
{
  var A = this.el.getCenterXY(true);
  this.moveTo(A[0], A[1]);
  return this
},moveTo:function(A, B)
{
  this.xy = [A,B];
  if (this.isVisible())
  {
    this.el.setXY(this.xy);
    this.adjustAssets()
  }
  return this
},alignTo:function(B, A, C)
{
  this.xy = this.el.getAlignToXY(B, A, C);
  if (this.isVisible())
  {
    this.el.setXY(this.xy);
    this.adjustAssets()
  }
  return this
},anchorTo:function(C, F, D, B)
{
  var E = function()
  {
    this.alignTo(C, F, D)
  };
  Ext.EventManager.onWindowResize(E, this);
  var A = typeof B;
  if (A != "undefined")
  {
    Ext.EventManager.on(window, "scroll", E, this, {buffer:A == "number" ? B : 50})
  }
  E.call(this);
  return this
},isVisible:function()
{
  return this.el.isVisible()
},animHide:function(B)
{
  var A = Ext.get(this.animateTarget).getBox();
  this.proxy.show();
  this.proxy.setBounds(this.xy[0], this.xy[1], this.size.width, this.size.height);
  this.el.hide();
  this.proxy.setBounds(A.x, A.y, A.width, A.height, true, 0.35, this.hideEl.createDelegate(this, [B]))
},hide:function(A)
{
  if (this.fireEvent("beforehide", this) === false)
  {
    return
  }
  if (this.shadow)
  {
    this.shadow.hide()
  }
  if (this.shim)
  {
    this.shim.hide()
  }
  if (this.animateTarget)
  {
    this.animHide(A)
  } else
  {
    this.el.hide();
    this.hideEl(A)
  }
  return this
},hideEl:function(A)
{
  this.proxy.hide();
  if (this.modal)
  {
    this.mask.hide();
    Ext.get(document.body).removeClass("x-body-masked")
  }
  this.fireEvent("hide", this);
  if (typeof A == "function")
  {
    A()
  }
},hideAction:function()
{
  this.setLeft("-10000px");
  this.setTop("-10000px");
  this.setStyle("visibility", "hidden")
},refreshSize:function()
{
  this.size = this.el.getSize();
  this.xy = this.el.getXY();
  Ext.state.Manager.set(this.stateId || this.el.id + "-state", this.el.getBox())
},setZIndex:function(A)
{
  if (this.modal)
  {
    this.mask.setStyle("z-index", A)
  }
  if (this.shim)
  {
    this.shim.setStyle("z-index", ++A)
  }
  if (this.shadow)
  {
    this.shadow.setZIndex(++A)
  }
  this.el.setStyle("z-index", ++A);
  if (this.proxy)
  {
    this.proxy.setStyle("z-index", ++A)
  }
  if (this.resizer)
  {
    this.resizer.proxy.setStyle("z-index", ++A)
  }
  this.lastZIndex = A
},getEl:function()
{
  return this.el
}});
Ext.DialogManager = function()
{
  var D = {};
  var B = [];
  var C = null;
  var A = function(G, F)
  {
    return(!G._lastAccess || G._lastAccess < F._lastAccess) ? -1 : 1
  };
  var E = function()
  {
    B.sort(A);
    var G = Ext.DialogManager.zseed;
    for (var H = 0,F = B.length; H < F; H++)
    {
      var I = B[H];
      if (I)
      {
        I.setZIndex(G + (H * 10))
      }
    }
  };
  return{zseed:9000,register:function(F)
  {
    D[F.id] = F;
    B.push(F)
  },unregister:function(H)
  {
    delete D[H.id];
    if (!B.indexOf)
    {
      for (var G = 0,F = B.length; G < F; G++)
      {
        if (B[G] == H)
        {
          B.splice(G, 1);
          return
        }
      }
    } else
    {
      var G = B.indexOf(H);
      if (G != -1)
      {
        B.splice(G, 1)
      }
    }
  },get:function(F)
  {
    return typeof F == "object" ? F : D[F]
  },bringToFront:function(F)
  {
    F = this.get(F);
    if (F != C)
    {
      C = F;
      F._lastAccess = new Date().getTime();
      E()
    }
    return F
  },sendToBack:function(F)
  {
    F = this.get(F);
    F._lastAccess = -(new Date().getTime());
    E();
    return F
  },hideAll:function()
  {
    for (var F in D)
    {
      if (D[F] && typeof D[F] != "function" && D[F].isVisible())
      {
        D[F].hide()
      }
    }
  }}
}();
Ext.LayoutDialog = function(B, A)
{
  A.autoTabs = false;
  Ext.LayoutDialog.superclass.constructor.call(this, B, A);
  this.body.setStyle({overflow:"hidden",position:"relative"});
  this.layout = new Ext.BorderLayout(this.body.dom, A);
  this.layout.monitorWindowResize = false;
  this.el.addClass("x-dlg-auto-layout");
  this.center = Ext.BasicDialog.prototype.center;
  this.on("show", this.layout.layout, this.layout, true)
};
Ext.extend(Ext.LayoutDialog, Ext.BasicDialog, {endUpdate:function()
{
  this.layout.endUpdate()
},beginUpdate:function()
{
  this.layout.beginUpdate()
},getLayout:function()
{
  return this.layout
},showEl:function()
{
  Ext.LayoutDialog.superclass.showEl.apply(this, arguments);
  if (Ext.isIE7)
  {
    this.layout.layout()
  }
},syncBodyHeight:function()
{
  Ext.LayoutDialog.superclass.syncBodyHeight.call(this);
  if (this.layout)
  {
    this.layout.layout()
  }
}});
Ext.MessageBox = function()
{
  var J,A,Q,G;
  var O,E,H,K,N,B;
  var I,L,D;
  var C = function(R)
  {
    J.hide();
    Ext.callback(A.fn, A.scope || window, [R,L.dom.value], 1)
  };
  var F = function()
  {
    if (A && A.cls)
    {
      J.el.removeClass(A.cls)
    }
    if (G)
    {
      Ext.TaskMgr.stop(G);
      G = null
    }
  };
  var M = function(R)
  {
    var T = 0;
    if (!R)
    {
      I["ok"].hide();
      I["cancel"].hide();
      I["yes"].hide();
      I["no"].hide();
      J.footer.dom.style.display = "none";
      return T
    }
    J.footer.dom.style.display = "";
    for (var S in I)
    {
      if (typeof I[S] != "function")
      {
        if (R[S])
        {
          I[S].show();
          I[S].setText(typeof R[S] == "string" ? R[S] : Ext.MessageBox.buttonText[S]);
          T += I[S].el.getWidth() + 15
        } else
        {
          I[S].hide()
        }
      }
    }
    return T
  };
  var P = function(T, R, S)
  {
    if (A && A.closable !== false)
    {
      J.hide()
    }
    if (S)
    {
      S.stopEvent()
    }
  };
  return{getDialog:function()
  {
    if (!J)
    {
      J = new Ext.BasicDialog("x-msg-box", {autoCreate:true,shadow:true,draggable:true,resizable:false,constraintoviewport:false,fixedcenter:true,collapsible:false,shim:true,modal:true,width:400,height:100,buttonAlign:"center",closeClick:function()
      {
        if (A && A.buttons && A.buttons.no && !A.buttons.cancel)
        {
          C("no")
        } else
        {
          C("cancel")
        }
      }});
      J.on("hide", F);
      Q = J.mask;
      J.addKeyListener(27, P);
      I = {};
      var S = this.buttonText;
      I["ok"] = J.addButton(S["ok"], C.createCallback("ok"));
      I["yes"] = J.addButton(S["yes"], C.createCallback("yes"));
      I["no"] = J.addButton(S["no"], C.createCallback("no"));
      I["cancel"] = J.addButton(S["cancel"], C.createCallback("cancel"));
      O = J.body.createChild({html:"<span class=\"ext-mb-text\"></span><br /><input type=\"text\" class=\"ext-mb-input\" /><textarea class=\"ext-mb-textarea\"></textarea><div class=\"ext-mb-progress-wrap\"><div class=\"ext-mb-progress\"><div class=\"ext-mb-progress-bar\">&#160;</div></div></div>"});
      E = O.dom.firstChild;
      H = Ext.get(O.dom.childNodes[2]);
      H.enableDisplayMode();
      H.addKeyListener([10,13], function()
      {
        if (J.isVisible() && A && A.buttons)
        {
          if (A.buttons.ok)
          {
            C("ok")
          } else
          {
            if (A.buttons.yes)
            {
              C("yes")
            }
          }
        }
      });
      K = Ext.get(O.dom.childNodes[3]);
      K.enableDisplayMode();
      N = Ext.get(O.dom.childNodes[4]);
      N.enableDisplayMode();
      var R = N.dom.firstChild;
      B = Ext.get(R.firstChild);
      B.setHeight(R.offsetHeight)
    }
    return J
  },updateText:function(S)
  {
    if (!J.isVisible() && !A.width)
    {
      J.resizeTo(this.maxWidth, 100)
    }
    E.innerHTML = S || "&#160;";
    var R = Math.max(Math.min(A.width || E.offsetWidth, this.maxWidth), Math.max(A.minWidth || this.minWidth, D));
    if (A.prompt)
    {
      L.setWidth(R)
    }
    if (J.isVisible())
    {
      J.fixedcenter = false
    }
    J.setContentSize(R, O.getHeight());
    if (J.isVisible())
    {
      J.fixedcenter = true
    }
    return this
  },updateProgress:function(R, S)
  {
    if (S)
    {
      this.updateText(S)
    }
    B.setWidth(Math.floor(R * N.dom.firstChild.offsetWidth));
    return this
  },isVisible:function()
  {
    return J && J.isVisible()
  },hide:function()
  {
    if (this.isVisible())
    {
      J.hide()
    }
  },show:function(T)
  {
    if (this.isVisible())
    {
      this.hide()
    }
    var U = this.getDialog();
    A = T;
    U.setTitle(A.title || "&#160;");
    U.close.setDisplayed(A.closable !== false);
    L = H;
    A.prompt = A.prompt || (A.multiline ? true : false);
    if (A.prompt)
    {
      if (A.multiline)
      {
        H.hide();
        K.show();
        K.setHeight(typeof A.multiline == "number" ? A.multiline : this.defaultTextHeight);
        L = K
      } else
      {
        H.show();
        K.hide()
      }
    } else
    {
      H.hide();
      K.hide()
    }
    N.setDisplayed(A.progress === true);
    this.updateProgress(0);
    L.dom.value = A.value || "";
    if (A.prompt)
    {
      J.setDefaultButton(L)
    } else
    {
      var S = A.buttons;
      var R = null;
      if (S && S.ok)
      {
        R = I["ok"]
      } else
      {
        if (S && S.yes)
        {
          R = I["yes"]
        }
      }
      J.setDefaultButton(R)
    }
    D = M(A.buttons);
    this.updateText(A.msg);
    if (A.cls)
    {
      U.el.addClass(A.cls)
    }
    U.proxyDrag = A.proxyDrag === true;
    U.modal = A.modal !== false;
    U.mask = A.modal !== false ? Q : false;
    if (!U.isVisible())
    {
      document.body.appendChild(J.el.dom);
      U.animateTarget = null;
      U.show(T.animEl)
    }
    return this
  },progress:function(S, R)
  {
    this.show({title:S,msg:R,buttons:false,progress:true,closable:false,minWidth:this.minProgressWidth});
    return this
  },alert:function(U, T, S, R)
  {
    this.show({title:U,msg:T,buttons:this.OK,fn:S,scope:R});
    return this
  },wait:function(S, R)
  {
    this.show({title:R,msg:S,buttons:false,closable:false,progress:true,modal:true,width:300,wait:true});
    G = Ext.TaskMgr.start({run:function(T)
    {
      Ext.MessageBox.updateProgress(((((T + 20) % 20) + 1) * 5) * 0.01)
    },interval:1000});
    return this
  },confirm:function(U, T, S, R)
  {
    this.show({title:U,msg:T,buttons:this.YESNO,fn:S,scope:R});
    return this
  },prompt:function(V, U, T, S, R)
  {
    this.show({title:V,msg:U,buttons:this.OKCANCEL,fn:T,minWidth:250,scope:S,prompt:true,multiline:R});
    return this
  },OK:{ok:true},YESNO:{yes:true,no:true},OKCANCEL:{ok:true,cancel:true},YESNOCANCEL:{yes:true,no:true,cancel:true},defaultTextHeight:75,maxWidth:600,minWidth:100,minProgressWidth:250,buttonText:{ok:"OK",cancel:"Cancel",yes:"Yes",no:"No"}}
}();
Ext.Msg = Ext.MessageBox;
Ext.QuickTips = function()
{
  var C,H,T,E,G,M,V,f = {},a,B = null,D,A;
  var U,K,L,Z;
  var F = false,J = true,W = false;
  var e = 1,O = 1,d = 1,Y = [];
  var S = function(k)
  {
    if (J)
    {
      return
    }
    var g = k.getTarget();
    if (!g || g.nodeType !== 1 || g == document || g == document.body)
    {
      return
    }
    if (U && g == U.el)
    {
      clearTimeout(O);
      return
    }
    if (g && f[g.id])
    {
      f[g.id].el = g;
      e = X.defer(G.showDelay, G, [f[g.id]]);
      return
    }
    var i,j = Ext.fly(g);
    var h = M.namespace;
    if (G.interceptTitles && g.title)
    {
      i = g.title;
      g.qtip = i;
      g.removeAttribute("title");
      k.preventDefault()
    } else
    {
      i = g.qtip || j.getAttributeNS(h, M.attribute)
    }
    if (i)
    {
      e = X.defer(G.showDelay, G, [{el:g,text:i,width:j.getAttributeNS(h, M.width),autoHide:j.getAttributeNS(h, M.hide) != "user",title:j.getAttributeNS(h, M.title),cls:j.getAttributeNS(h, M.cls)}])
    }
  };
  var c = function(h)
  {
    clearTimeout(e);
    var g = h.getTarget();
    if (g && U && U.el == g && (G.autoHide && U.autoHide !== false))
    {
      O = setTimeout(Q, G.hideDelay)
    }
  };
  var P = function(g)
  {
    if (J)
    {
      return
    }
    L = g.getXY();
    L[1] += 18;
    if (G.trackMouse && U)
    {
      C.setXY(L)
    }
  };
  var I = function(g)
  {
    clearTimeout(e);
    clearTimeout(O);
    if (!g.within(C))
    {
      if (G.hideOnClick)
      {
        Q();
        G.disable();
        G.enable.defer(100, G)
      }
    }
  };
  var N = function()
  {
    return D.getPadding("l") + A.getPadding("r")
  };
  var X = function(j)
  {
    if (J)
    {
      return
    }
    clearTimeout(d);
    U = j;
    if (B)
    {
      C.removeClass(B);
      B = null
    }
    if (U.cls)
    {
      C.addClass(U.cls);
      B = U.cls
    }
    if (U.title)
    {
      E.update(U.title);
      E.show()
    } else
    {
      E.update("");
      E.hide()
    }
    C.dom.style.width = G.maxWidth + "px";
    T.update(j.text);
    var i = N(),g = U.width;
    if (!g)
    {
      var k = T.dom;
      var h = Math.max(k.offsetWidth, k.clientWidth, k.scrollWidth);
      if (h > G.maxWidth)
      {
        g = G.maxWidth
      } else
      {
        if (h < G.minWidth)
        {
          g = G.minWidth
        } else
        {
          g = h
        }
      }
    }
    C.setWidth(parseInt(g, 10) + i);
    if (U.autoHide === false)
    {
      V.setDisplayed(true);
      if (Z)
      {
        Z.unlock()
      }
    } else
    {
      V.setDisplayed(false);
      if (Z)
      {
        Z.lock()
      }
    }
    if (L)
    {
      C.avoidY = L[1] - 18;
      C.setXY(L)
    }
    if (G.animate)
    {
      C.setOpacity(0.1);
      C.setStyle("visibility", "visible");
      C.fadeIn({callback:b})
    } else
    {
      b()
    }
  };
  var b = function()
  {
    if (U)
    {
      C.show();
      a.enable();
      if (G.autoDismiss && U.autoHide !== false)
      {
        d = setTimeout(Q, G.autoDismissDelay)
      }
    }
  };
  var Q = function(g)
  {
    clearTimeout(d);
    clearTimeout(O);
    U = null;
    if (C.isVisible())
    {
      a.disable();
      if (g !== true && G.animate)
      {
        C.fadeOut({callback:R})
      } else
      {
        R()
      }
    }
  };
  var R = function()
  {
    C.hide();
    if (B)
    {
      C.removeClass(B);
      B = null
    }
  };
  return{minWidth:40,maxWidth:300,interceptTitles:false,trackMouse:false,hideOnClick:true,showDelay:500,hideDelay:200,autoHide:true,autoDismiss:true,autoDismissDelay:5000,animate:false,init:function()
  {
    G = Ext.QuickTips;
    M = G.tagConfig;
    if (!W)
    {
      if (!Ext.isReady)
      {
        Ext.onReady(Ext.QuickTips.init, Ext.QuickTips);
        return
      }
      C = new Ext.Layer({cls:"x-tip",shadow:"drop",shim:true,constrain:true,shadowOffset:4});
      C.fxDefaults = {stopFx:true};
      C.update("<div class=\"x-tip-top-left\"><div class=\"x-tip-top-right\"><div class=\"x-tip-top\"></div></div></div><div class=\"x-tip-bd-left\"><div class=\"x-tip-bd-right\"><div class=\"x-tip-bd\"><div class=\"x-tip-close\"></div><h3></h3><div class=\"x-tip-bd-inner\"></div><div class=\"x-clear\"></div></div></div></div><div class=\"x-tip-ft-left\"><div class=\"x-tip-ft-right\"><div class=\"x-tip-ft\"></div></div></div>");
      E = C.child("h3");
      E.enableDisplayMode("block");
      H = C.child("div.x-tip-bd");
      T = C.child("div.x-tip-bd-inner");
      D = C.child("div.x-tip-bd-left");
      A = C.child("div.x-tip-bd-right");
      V = C.child("div.x-tip-close");
      V.enableDisplayMode("block");
      V.on("click", Q);
      var g = Ext.get(document);
      g.on("mousedown", I);
      g.on("mouseover", S);
      g.on("mouseout", c);
      g.on("mousemove", P);
      a = g.addKeyListener(27, Q);
      a.disable();
      if (Ext.dd.DD)
      {
        Z = C.initDD("default", null, {onDrag:function()
        {
          C.sync()
        }});
        Z.setHandleElId(E.id);
        Z.lock()
      }
      W = true
    }
    this.enable()
  },register:function(l)
  {
    var n = l instanceof Array ? l : arguments;
    for (var m = 0,g = n.length; m < g; m++)
    {
      var p = n[m];
      var o = p.target;
      if (o)
      {
        if (o instanceof Array)
        {
          for (var k = 0,h = o.length; k < h; k++)
          {
            f[o[k]] = p
          }
        } else
        {
          f[typeof o == "string" ? o : Ext.id(o)] = p
        }
      }
    }
  },unregister:function(g)
  {
    delete f[Ext.id(g)]
  },enable:function()
  {
    if (W && J)
    {
      Y.pop();
      if (Y.length < 1)
      {
        J = false
      }
    }
  },disable:function()
  {
    J = true;
    clearTimeout(e);
    clearTimeout(O);
    clearTimeout(d);
    if (U)
    {
      Q(true)
    }
    Y.push(1)
  },isEnabled:function()
  {
    return !J
  },tagConfig:{namespace:"ext",attribute:"qtip",width:"width",target:"target",title:"qtitle",hide:"hide",cls:"qclass"}}
}();
Ext.QuickTips.tips = Ext.QuickTips.register;
Ext.tree.TreePanel = function(B, A)
{
  Ext.apply(this, A);
  Ext.tree.TreePanel.superclass.constructor.call(this);
  this.el = Ext.get(B);
  this.el.addClass("x-tree");
  this.id = this.el.id;
  this.addEvents({"beforeload":true,"load":true,"textchange":true,"beforeexpand":true,"beforecollapse":true,"expand":true,"disabledchange":true,"collapse":true,"beforeclick":true,"checkchange":true,"click":true,"dblclick":true,"contextmenu":true,"beforechildrenrendered":true,"startdrag":true,"enddrag":true,"dragdrop":true,"beforenodedrop":true,"nodedrop":true,"nodedragover":true});
  if (this.singleExpand)
  {
    this.on("beforeexpand", this.restrictExpand, this)
  }
};
Ext.extend(Ext.tree.TreePanel, Ext.data.Tree, {rootVisible:true,animate:Ext.enableFx,lines:true,enableDD:false,hlDrop:Ext.enableFx,restrictExpand:function(A)
{
  var B = A.parentNode;
  if (B)
  {
    if (B.expandedChild && B.expandedChild.parentNode == B)
    {
      B.expandedChild.collapse()
    }
    B.expandedChild = A
  }
},setRootNode:function(A)
{
  Ext.tree.TreePanel.superclass.setRootNode.call(this, A);
  if (!this.rootVisible)
  {
    A.ui = new Ext.tree.RootTreeNodeUI(A)
  }
  return A
},getEl:function()
{
  return this.el
},getLoader:function()
{
  return this.loader
},expandAll:function()
{
  this.root.expand(true)
},collapseAll:function()
{
  this.root.collapse(true)
},getSelectionModel:function()
{
  if (!this.selModel)
  {
    this.selModel = new Ext.tree.DefaultSelectionModel()
  }
  return this.selModel
},getChecked:function(A, B)
{
  B = B || this.root;
  var C = [];
  var D = function()
  {
    if (this.attributes.checked)
    {
      C.push(!A ? this : (A == "id" ? this.id : this.attributes[A]))
    }
  };
  B.cascade(D);
  return C
},expandPath:function(F, A, G)
{
  A = A || "id";
  var D = F.split(this.pathSeparator);
  var C = this.root;
  if (C.attributes[A] != D[1])
  {
    if (G)
    {
      G(false, null)
    }
    return
  }
  var B = 1;
  var E = function()
  {
    if (++B == D.length)
    {
      if (G)
      {
        G(true, C)
      }
      return
    }
    var H = C.findChild(A, D[B]);
    if (!H)
    {
      if (G)
      {
        G(false, C)
      }
      return
    }
    C = H;
    H.expand(false, false, E)
  };
  C.expand(false, false, E)
},selectPath:function(E, A, F)
{
  A = A || "id";
  var C = E.split(this.pathSeparator);
  var B = C.pop();
  if (C.length > 0)
  {
    var D = function(H, G)
    {
      if (H && G)
      {
        var I = G.findChild(A, B);
        if (I)
        {
          I.select();
          if (F)
          {
            F(true, I)
          }
        } else
        {
          if (F)
          {
            F(false, I)
          }
        }
      } else
      {
        if (F)
        {
          F(false, I)
        }
      }
    };
    this.expandPath(C.join(this.pathSeparator), A, D)
  } else
  {
    this.root.select();
    if (F)
    {
      F(true, this.root)
    }
  }
},getTreeEl:function()
{
  return this.el
},render:function()
{
  this.innerCt = this.el.createChild({tag:"ul",cls:"x-tree-root-ct " + (this.lines ? "x-tree-lines" : "x-tree-no-lines")});
  if (this.containerScroll)
  {
    Ext.dd.ScrollManager.register(this.el)
  }
  if ((this.enableDD || this.enableDrop) && !this.dropZone)
  {
    this.dropZone = new Ext.tree.TreeDropZone(this, this.dropConfig || {ddGroup:this.ddGroup || "TreeDD",appendOnly:this.ddAppendOnly === true})
  }
  if ((this.enableDD || this.enableDrag) && !this.dragZone)
  {
    this.dragZone = new Ext.tree.TreeDragZone(this, this.dragConfig || {ddGroup:this.ddGroup || "TreeDD",scroll:this.ddScroll})
  }
  this.getSelectionModel().init(this);
  this.root.render();
  if (!this.rootVisible)
  {
    this.root.renderChildren()
  }
  return this
}});
Ext.tree.DefaultSelectionModel = function()
{
  this.selNode = null;
  this.addEvents({"selectionchange":true,"beforeselect":true})
};
Ext.extend(Ext.tree.DefaultSelectionModel, Ext.util.Observable, {init:function(A)
{
  this.tree = A;
  A.getTreeEl().on("keydown", this.onKeyDown, this);
  A.on("click", this.onNodeClick, this)
},onNodeClick:function(A, B)
{
  this.select(A)
},select:function(B)
{
  var A = this.selNode;
  if (A != B && this.fireEvent("beforeselect", this, B, A) !== false)
  {
    if (A)
    {
      A.ui.onSelectedChange(false)
    }
    this.selNode = B;
    B.ui.onSelectedChange(true);
    this.fireEvent("selectionchange", this, B, A)
  }
  return B
},unselect:function(A)
{
  if (this.selNode == A)
  {
    this.clearSelections()
  }
},clearSelections:function()
{
  var A = this.selNode;
  if (A)
  {
    A.ui.onSelectedChange(false);
    this.selNode = null;
    this.fireEvent("selectionchange", this, null)
  }
  return A
},getSelectedNode:function()
{
  return this.selNode
},isSelected:function(A)
{
  return this.selNode == A
},selectPrevious:function()
{
  var A = this.selNode || this.lastSelNode;
  if (!A)
  {
    return null
  }
  var C = A.previousSibling;
  if (C)
  {
    if (!C.isExpanded() || C.childNodes.length < 1)
    {
      return this.select(C)
    } else
    {
      var B = C.lastChild;
      while (B && B.isExpanded() && B.childNodes.length > 0)
      {
        B = B.lastChild
      }
      return this.select(B)
    }
  } else
  {
    if (A.parentNode && (this.tree.rootVisible || !A.parentNode.isRoot))
    {
      return this.select(A.parentNode)
    }
  }
  return null
},selectNext:function()
{
  var B = this.selNode || this.lastSelNode;
  if (!B)
  {
    return null
  }
  if (B.firstChild && B.isExpanded())
  {
    return this.select(B.firstChild)
  } else
  {
    if (B.nextSibling)
    {
      return this.select(B.nextSibling)
    } else
    {
      if (B.parentNode)
      {
        var A = null;
        B.parentNode.bubble(function()
        {
          if (this.nextSibling)
          {
            A = this.getOwnerTree().selModel.select(this.nextSibling);
            return false
          }
        });
        return A
      }
    }
  }
  return null
},onKeyDown:function(C)
{
  var B = this.selNode || this.lastSelNode;
  var D = this;
  if (!B)
  {
    return
  }
  var A = C.getKey();
  switch (A)
      {case C.DOWN:C.stopEvent();this.selectNext();break;case C.UP:C.stopEvent();this.selectPrevious();break;case C.RIGHT:C.preventDefault();if (B.hasChildNodes())
  {
    if (!B.isExpanded())
    {
      B.expand()
    } else
    {
      if (B.firstChild)
      {
        this.select(B.firstChild, C)
      }
    }
  }break;case C.LEFT:C.preventDefault();if (B.hasChildNodes() && B.isExpanded())
  {
    B.collapse()
  } else
  {
    if (B.parentNode && (this.tree.rootVisible || B.parentNode != this.tree.getRootNode()))
    {
      this.select(B.parentNode, C)
    }
  }break}
}});
Ext.tree.MultiSelectionModel = function()
{
  this.selNodes = [];
  this.selMap = {};
  this.addEvents({"selectionchange":true})
};
Ext.extend(Ext.tree.MultiSelectionModel, Ext.util.Observable, {init:function(A)
{
  this.tree = A;
  A.getTreeEl().on("keydown", this.onKeyDown, this);
  A.on("click", this.onNodeClick, this)
},onNodeClick:function(A, B)
{
  this.select(A, B, B.ctrlKey)
},select:function(A, C, B)
{
  if (B !== true)
  {
    this.clearSelections(true)
  }
  if (this.isSelected(A))
  {
    this.lastSelNode = A;
    return A
  }
  this.selNodes.push(A);
  this.selMap[A.id] = A;
  this.lastSelNode = A;
  A.ui.onSelectedChange(true);
  this.fireEvent("selectionchange", this, this.selNodes);
  return A
},unselect:function(D)
{
  if (this.selMap[D.id])
  {
    D.ui.onSelectedChange(false);
    var E = this.selNodes;
    var B = -1;
    if (E.indexOf)
    {
      B = E.indexOf(D)
    } else
    {
      for (var C = 0,A = E.length; C < A; C++)
      {
        if (E[C] == D)
        {
          B = C;
          break
        }
      }
    }
    if (B != -1)
    {
      this.selNodes.splice(B, 1)
    }
    delete this.selMap[D.id];
    this.fireEvent("selectionchange", this, this.selNodes)
  }
},clearSelections:function(B)
{
  var D = this.selNodes;
  if (D.length > 0)
  {
    for (var C = 0,A = D.length; C < A; C++)
    {
      D[C].ui.onSelectedChange(false)
    }
    this.selNodes = [];
    this.selMap = {};
    if (B !== true)
    {
      this.fireEvent("selectionchange", this, this.selNodes)
    }
  }
},isSelected:function(A)
{
  return this.selMap[A.id] ? true : false
},getSelectedNodes:function()
{
  return this.selNodes
},onKeyDown:Ext.tree.DefaultSelectionModel.prototype.onKeyDown,selectNext:Ext.tree.DefaultSelectionModel.prototype.selectNext,selectPrevious:Ext.tree.DefaultSelectionModel.prototype.selectPrevious});
Ext.tree.TreeNode = function(A)
{
  A = A || {};
  if (typeof A == "string")
  {
    A = {text:A}
  }
  this.childrenRendered = false;
  this.rendered = false;
  Ext.tree.TreeNode.superclass.constructor.call(this, A);
  this.expanded = A.expanded === true;
  this.isTarget = A.isTarget !== false;
  this.draggable = A.draggable !== false && A.allowDrag !== false;
  this.allowChildren = A.allowChildren !== false && A.allowDrop !== false;
  this.text = A.text;
  this.disabled = A.disabled === true;
  this.addEvents({"textchange":true,"beforeexpand":true,"beforecollapse":true,"expand":true,"disabledchange":true,"collapse":true,"beforeclick":true,"checkchange":true,"click":true,"dblclick":true,"contextmenu":true,"beforechildrenrendered":true});
  var B = this.attributes.uiProvider || Ext.tree.TreeNodeUI;
  this.ui = new B(this)
};
Ext.extend(Ext.tree.TreeNode, Ext.data.Node, {preventHScroll:true,isExpanded:function()
{
  return this.expanded
},getUI:function()
{
  return this.ui
},setFirstChild:function(A)
{
  var B = this.firstChild;
  Ext.tree.TreeNode.superclass.setFirstChild.call(this, A);
  if (this.childrenRendered && B && A != B)
  {
    B.renderIndent(true, true)
  }
  if (this.rendered)
  {
    this.renderIndent(true, true)
  }
},setLastChild:function(B)
{
  var A = this.lastChild;
  Ext.tree.TreeNode.superclass.setLastChild.call(this, B);
  if (this.childrenRendered && A && B != A)
  {
    A.renderIndent(true, true)
  }
  if (this.rendered)
  {
    this.renderIndent(true, true)
  }
},appendChild:function()
{
  var A = Ext.tree.TreeNode.superclass.appendChild.apply(this, arguments);
  if (A && this.childrenRendered)
  {
    A.render()
  }
  this.ui.updateExpandIcon();
  return A
},removeChild:function(A)
{
  this.ownerTree.getSelectionModel().unselect(A);
  Ext.tree.TreeNode.superclass.removeChild.apply(this, arguments);
  if (this.childrenRendered)
  {
    A.ui.remove()
  }
  if (this.childNodes.length < 1)
  {
    this.collapse(false, false)
  } else
  {
    this.ui.updateExpandIcon()
  }
  if (!this.firstChild)
  {
    this.childrenRendered = false
  }
  return A
},insertBefore:function(C, A)
{
  var B = Ext.tree.TreeNode.superclass.insertBefore.apply(this, arguments);
  if (B && A && this.childrenRendered)
  {
    C.render()
  }
  this.ui.updateExpandIcon();
  return B
},setText:function(B)
{
  var A = this.text;
  this.text = B;
  this.attributes.text = B;
  if (this.rendered)
  {
    this.ui.onTextChange(this, B, A)
  }
  this.fireEvent("textchange", this, B, A)
},select:function()
{
  this.getOwnerTree().getSelectionModel().select(this)
},unselect:function()
{
  this.getOwnerTree().getSelectionModel().unselect(this)
},isSelected:function()
{
  return this.getOwnerTree().getSelectionModel().isSelected(this)
},expand:function(A, B, C)
{
  if (!this.expanded)
  {
    if (this.fireEvent("beforeexpand", this, A, B) === false)
    {
      return
    }
    if (!this.childrenRendered)
    {
      this.renderChildren()
    }
    this.expanded = true;
    if (!this.isHiddenRoot() && (this.getOwnerTree().animate && B !== false) || B)
    {
      this.ui.animExpand(function()
      {
        this.fireEvent("expand", this);
        if (typeof C == "function")
        {
          C(this)
        }
        if (A === true)
        {
          this.expandChildNodes(true)
        }
      }.createDelegate(this));
      return
    } else
    {
      this.ui.expand();
      this.fireEvent("expand", this);
      if (typeof C == "function")
      {
        C(this)
      }
    }
  } else
  {
    if (typeof C == "function")
    {
      C(this)
    }
  }
  if (A === true)
  {
    this.expandChildNodes(true)
  }
},isHiddenRoot:function()
{
  return this.isRoot && !this.getOwnerTree().rootVisible
},collapse:function(B, E)
{
  if (this.expanded && !this.isHiddenRoot())
  {
    if (this.fireEvent("beforecollapse", this, B, E) === false)
    {
      return
    }
    this.expanded = false;
    if ((this.getOwnerTree().animate && E !== false) || E)
    {
      this.ui.animCollapse(function()
      {
        this.fireEvent("collapse", this);
        if (B === true)
        {
          this.collapseChildNodes(true)
        }
      }.createDelegate(this));
      return
    } else
    {
      this.ui.collapse();
      this.fireEvent("collapse", this)
    }
  }
  if (B === true)
  {
    var D = this.childNodes;
    for (var C = 0,A = D.length; C < A; C++)
    {
      D[C].collapse(true, false)
    }
  }
},delayedExpand:function(A)
{
  if (!this.expandProcId)
  {
    this.expandProcId = this.expand.defer(A, this)
  }
},cancelExpand:function()
{
  if (this.expandProcId)
  {
    clearTimeout(this.expandProcId)
  }
  this.expandProcId = false
},toggle:function()
{
  if (this.expanded)
  {
    this.collapse()
  } else
  {
    this.expand()
  }
},ensureVisible:function(B)
{
  var A = this.getOwnerTree();
  A.expandPath(this.parentNode.getPath(), false, function()
  {
    A.getTreeEl().scrollChildIntoView(this.ui.anchor);
    Ext.callback(B)
  }.createDelegate(this))
},expandChildNodes:function(B)
{
  var D = this.childNodes;
  for (var C = 0,A = D.length; C < A; C++)
  {
    D[C].expand(B)
  }
},collapseChildNodes:function(B)
{
  var D = this.childNodes;
  for (var C = 0,A = D.length; C < A; C++)
  {
    D[C].collapse(B)
  }
},disable:function()
{
  this.disabled = true;
  this.unselect();
  if (this.rendered && this.ui.onDisableChange)
  {
    this.ui.onDisableChange(this, true)
  }
  this.fireEvent("disabledchange", this, true)
},enable:function()
{
  this.disabled = false;
  if (this.rendered && this.ui.onDisableChange)
  {
    this.ui.onDisableChange(this, false)
  }
  this.fireEvent("disabledchange", this, false)
},renderChildren:function(B)
{
  if (B !== false)
  {
    this.fireEvent("beforechildrenrendered", this)
  }
  var D = this.childNodes;
  for (var C = 0,A = D.length; C < A; C++)
  {
    D[C].render(true)
  }
  this.childrenRendered = true
},sort:function(E, D)
{
  Ext.tree.TreeNode.superclass.sort.apply(this, arguments);
  if (this.childrenRendered)
  {
    var C = this.childNodes;
    for (var B = 0,A = C.length; B < A; B++)
    {
      C[B].render(true)
    }
  }
},render:function(A)
{
  this.ui.render(A);
  if (!this.rendered)
  {
    this.rendered = true;
    if (this.expanded)
    {
      this.expanded = false;
      this.expand(false, false)
    }
  }
},renderIndent:function(B, E)
{
  if (E)
  {
    this.ui.childIndent = null
  }
  this.ui.renderIndent();
  if (B === true && this.childrenRendered)
  {
    var D = this.childNodes;
    for (var C = 0,A = D.length; C < A; C++)
    {
      D[C].renderIndent(true, E)
    }
  }
}});
Ext.tree.AsyncTreeNode = function(A)
{
  this.loaded = false;
  this.loading = false;
  Ext.tree.AsyncTreeNode.superclass.constructor.apply(this, arguments);
  this.addEvents({"beforeload":true,"load":true})
};
Ext.extend(Ext.tree.AsyncTreeNode, Ext.tree.TreeNode, {expand:function(B, D, F)
{
  if (this.loading)
  {
    var E;
    var C = function()
    {
      if (!this.loading)
      {
        clearInterval(E);
        this.expand(B, D, F)
      }
    }.createDelegate(this);
    E = setInterval(C, 200);
    return
  }
  if (!this.loaded)
  {
    if (this.fireEvent("beforeload", this) === false)
    {
      return
    }
    this.loading = true;
    this.ui.beforeLoad(this);
    var A = this.loader || this.attributes.loader || this.getOwnerTree().getLoader();
    if (A)
    {
      A.load(this, this.loadComplete.createDelegate(this, [B,D,F]));
      return
    }
  }
  Ext.tree.AsyncTreeNode.superclass.expand.call(this, B, D, F)
},isLoading:function()
{
  return this.loading
},loadComplete:function(A, B, C)
{
  this.loading = false;
  this.loaded = true;
  this.ui.afterLoad(this);
  this.fireEvent("load", this);
  this.expand(A, B, C)
},isLoaded:function()
{
  return this.loaded
},hasChildNodes:function()
{
  if (!this.isLeaf() && !this.loaded)
  {
    return true
  } else
  {
    return Ext.tree.AsyncTreeNode.superclass.hasChildNodes.call(this)
  }
},reload:function(A)
{
  this.collapse(false, false);
  while (this.firstChild)
  {
    this.removeChild(this.firstChild)
  }
  this.childrenRendered = false;
  this.loaded = false;
  if (this.isHiddenRoot())
  {
    this.expanded = false
  }
  this.expand(false, false, A)
}});
Ext.tree.TreeNodeUI = function(A)
{
  this.node = A;
  this.rendered = false;
  this.animating = false;
  this.emptyIcon = Ext.BLANK_IMAGE_URL
};
Ext.tree.TreeNodeUI.prototype = {removeChild:function(A)
{
  if (this.rendered)
  {
    this.ctNode.removeChild(A.ui.getEl())
  }
},beforeLoad:function()
{
  this.addClass("x-tree-node-loading")
},afterLoad:function()
{
  this.removeClass("x-tree-node-loading")
},onTextChange:function(B, C, A)
{
  if (this.rendered)
  {
    this.textNode.innerHTML = C
  }
},onDisableChange:function(A, B)
{
  this.disabled = B;
  if (B)
  {
    this.addClass("x-tree-node-disabled")
  } else
  {
    this.removeClass("x-tree-node-disabled")
  }
},onSelectedChange:function(A)
{
  if (A)
  {
    this.focus();
    this.addClass("x-tree-selected")
  } else
  {
    this.removeClass("x-tree-selected")
  }
},onMove:function(A, G, E, F, D, B)
{
  this.childIndent = null;
  if (this.rendered)
  {
    var H = F.ui.getContainer();
    if (!H)
    {
      this.holder = document.createElement("div");
      this.holder.appendChild(this.wrap);
      return
    }
    var C = B ? B.ui.getEl() : null;
    if (C)
    {
      H.insertBefore(this.wrap, C)
    } else
    {
      H.appendChild(this.wrap)
    }
    this.node.renderIndent(true)
  }
},addClass:function(A)
{
  if (this.elNode)
  {
    Ext.fly(this.elNode).addClass(A)
  }
},removeClass:function(A)
{
  if (this.elNode)
  {
    Ext.fly(this.elNode).removeClass(A)
  }
},remove:function()
{
  if (this.rendered)
  {
    this.holder = document.createElement("div");
    this.holder.appendChild(this.wrap)
  }
},fireEvent:function()
{
  return this.node.fireEvent.apply(this.node, arguments)
},initEvents:function()
{
  this.node.on("move", this.onMove, this);
  var G = Ext.EventManager;
  var B = this.anchor;
  var D = Ext.fly(B, "_treeui");
  if (Ext.isOpera)
  {
    D.setStyle("text-decoration", "none")
  }
  D.on("click", this.onClick, this);
  D.on("dblclick", this.onDblClick, this);
  if (this.checkbox)
  {
    Ext.EventManager.on(this.checkbox, Ext.isIE ? "click" : "change", this.onCheckChange, this)
  }
  D.on("contextmenu", this.onContextMenu, this);
  var C = Ext.fly(this.iconNode);
  C.on("click", this.onClick, this);
  C.on("dblclick", this.onDblClick, this);
  C.on("contextmenu", this.onContextMenu, this);
  G.on(this.ecNode, "click", this.ecClick, this, true);
  if (this.node.disabled)
  {
    this.addClass("x-tree-node-disabled")
  }
  if (this.node.hidden)
  {
    this.addClass("x-tree-node-disabled")
  }
  var F = this.node.getOwnerTree();
  var A = F.enableDD || F.enableDrag || F.enableDrop;
  if (A && (!this.node.isRoot || F.rootVisible))
  {
    Ext.dd.Registry.register(this.elNode, {node:this.node,handles:this.getDDHandles(),isHandle:false})
  }
},getDDHandles:function()
{
  return[this.iconNode,this.textNode]
},hide:function()
{
  if (this.rendered)
  {
    this.wrap.style.display = "none"
  }
},show:function()
{
  if (this.rendered)
  {
    this.wrap.style.display = ""
  }
},onContextMenu:function(A)
{
  if (this.node.hasListener("contextmenu") || this.node.getOwnerTree().hasListener("contextmenu"))
  {
    A.preventDefault();
    this.focus();
    this.fireEvent("contextmenu", this.node, A)
  }
},onClick:function(A)
{
  if (this.dropping)
  {
    A.stopEvent();
    return
  }
  if (this.fireEvent("beforeclick", this.node, A) !== false)
  {
    if (!this.disabled && this.node.attributes.href)
    {
      this.fireEvent("click", this.node, A);
      return
    }
    A.preventDefault();
    if (this.disabled)
    {
      return
    }
    if (this.node.attributes.singleClickExpand && !this.animating && this.node.hasChildNodes())
    {
      this.node.toggle()
    }
    this.fireEvent("click", this.node, A)
  } else
  {
    A.stopEvent()
  }
},onDblClick:function(A)
{
  A.preventDefault();
  if (this.disabled)
  {
    return
  }
  if (this.checkbox)
  {
    this.toggleCheck()
  }
  if (!this.animating && this.node.hasChildNodes())
  {
    this.node.toggle()
  }
  this.fireEvent("dblclick", this.node, A)
},onCheckChange:function()
{
  var A = this.checkbox.checked;
  this.node.attributes.checked = A;
  this.fireEvent("checkchange", this.node, A)
},ecClick:function(A)
{
  if (!this.animating && this.node.hasChildNodes())
  {
    this.node.toggle()
  }
},startDrop:function()
{
  this.dropping = true
},endDrop:function()
{
  setTimeout(function()
  {
    this.dropping = false
  }.createDelegate(this), 50)
},expand:function()
{
  this.updateExpandIcon();
  this.ctNode.style.display = ""
},focus:function()
{
  if (!this.node.preventHScroll)
  {
    try
    {
      this.anchor.focus()
    } catch(C)
    {
    }
  } else
  {
    if (!Ext.isIE)
    {
      try
      {
        var B = this.node.getOwnerTree().getTreeEl().dom;
        var A = B.scrollLeft;
        this.anchor.focus();
        B.scrollLeft = A
      } catch(C)
      {
      }
    }
  }
},toggleCheck:function(B)
{
  var A = this.checkbox;
  if (A)
  {
    A.checked = (B === undefined ? !A.checked : B)
  }
},blur:function()
{
  try
  {
    this.anchor.blur()
  } catch(A)
  {
  }
},animExpand:function(B)
{
  var A = Ext.get(this.ctNode);
  A.stopFx();
  if (!this.node.hasChildNodes())
  {
    this.updateExpandIcon();
    this.ctNode.style.display = "";
    Ext.callback(B);
    return
  }
  this.animating = true;
  this.updateExpandIcon();
  A.slideIn("t", {callback:function()
  {
    this.animating = false;
    Ext.callback(B)
  },scope:this,duration:this.node.ownerTree.duration || 0.25})
},highlight:function()
{
  var A = this.node.getOwnerTree();
  Ext.fly(this.wrap).highlight(A.hlColor || "C3DAF9", {endColor:A.hlBaseColor})
},collapse:function()
{
  this.updateExpandIcon();
  this.ctNode.style.display = "none"
},animCollapse:function(B)
{
  var A = Ext.get(this.ctNode);
  A.enableDisplayMode("block");
  A.stopFx();
  this.animating = true;
  this.updateExpandIcon();
  A.slideOut("t", {callback:function()
  {
    this.animating = false;
    Ext.callback(B)
  },scope:this,duration:this.node.ownerTree.duration || 0.25})
},getContainer:function()
{
  return this.ctNode
},getEl:function()
{
  return this.wrap
},appendDDGhost:function(A)
{
  A.appendChild(this.elNode.cloneNode(true))
},getDDRepairXY:function()
{
  return Ext.lib.Dom.getXY(this.iconNode)
},onRender:function()
{
  this.render()
},render:function(B)
{
  var D = this.node,A = D.attributes;
  var C = D.parentNode ? D.parentNode.ui.getContainer() : D.ownerTree.innerCt.dom;
  if (!this.rendered)
  {
    this.rendered = true;
    this.renderElements(D, A, C, B);
    if (A.qtip)
    {
      if (this.textNode.setAttributeNS)
      {
        this.textNode.setAttributeNS("ext", "qtip", A.qtip);
        if (A.qtipTitle)
        {
          this.textNode.setAttributeNS("ext", "qtitle", A.qtipTitle)
        }
      } else
      {
        this.textNode.setAttribute("ext:qtip", A.qtip);
        if (A.qtipTitle)
        {
          this.textNode.setAttribute("ext:qtitle", A.qtipTitle)
        }
      }
    } else
    {
      if (A.qtipCfg)
      {
        A.qtipCfg.target = Ext.id(this.textNode);
        Ext.QuickTips.register(A.qtipCfg)
      }
    }
    this.initEvents();
    if (!this.node.expanded)
    {
      this.updateExpandIcon()
    }
  } else
  {
    if (B === true)
    {
      C.appendChild(this.wrap)
    }
  }
},renderElements:function(C, H, G, I)
{
  this.indentMarkup = C.parentNode ? C.parentNode.ui.getChildIndent() : "";
  var D = typeof H.checked == "boolean";
  var A = H.href ? H.href : Ext.isGecko ? "" : "#";
  var B = ["<li class=\"x-tree-node\"><div class=\"x-tree-node-el ",H.cls,"\">","<span class=\"x-tree-node-indent\">",this.indentMarkup,"</span>","<img src=\"",this.emptyIcon,"\" class=\"x-tree-ec-icon\" />","<img src=\"",H.icon || this.emptyIcon,"\" class=\"x-tree-node-icon",(H.icon ? " x-tree-node-inline-icon" : ""),(H.iconCls ? " " + H.iconCls : ""),"\" unselectable=\"on\" />",D ? ("<input class=\"x-tree-node-cb\" type=\"checkbox\" " + (H.checked ? "checked=\"checked\" />" : " />")) : "","<a hidefocus=\"on\" href=\"",A,"\" tabIndex=\"1\" ",H.hrefTarget ? " target=\"" + H.hrefTarget + "\"" : "","><span unselectable=\"on\">",C.text,"</span></a></div>","<ul class=\"x-tree-node-ct\" style=\"display:none;\"></ul>","</li>"];
  if (I !== true && C.nextSibling && C.nextSibling.ui.getEl())
  {
    this.wrap = Ext.DomHelper.insertHtml("beforeBegin", C.nextSibling.ui.getEl(), B.join(""))
  } else
  {
    this.wrap = Ext.DomHelper.insertHtml("beforeEnd", G, B.join(""))
  }
  this.elNode = this.wrap.childNodes[0];
  this.ctNode = this.wrap.childNodes[1];
  var F = this.elNode.childNodes;
  this.indentNode = F[0];
  this.ecNode = F[1];
  this.iconNode = F[2];
  var E = 3;
  if (D)
  {
    this.checkbox = F[3];
    E++
  }
  this.anchor = F[E];
  this.textNode = F[E].firstChild
},getAnchor:function()
{
  return this.anchor
},getTextEl:function()
{
  return this.textNode
},getIconEl:function()
{
  return this.iconNode
},isChecked:function()
{
  return this.checkbox ? this.checkbox.checked : false
},updateExpandIcon:function()
{
  if (this.rendered)
  {
    var F = this.node,D,C;
    var A = F.isLast() ? "x-tree-elbow-end" : "x-tree-elbow";
    var E = F.hasChildNodes();
    if (E)
    {
      if (F.expanded)
      {
        A += "-minus";
        D = "x-tree-node-collapsed";
        C = "x-tree-node-expanded"
      } else
      {
        A += "-plus";
        D = "x-tree-node-expanded";
        C = "x-tree-node-collapsed"
      }
      if (this.wasLeaf)
      {
        this.removeClass("x-tree-node-leaf");
        this.wasLeaf = false
      }
      if (this.c1 != D || this.c2 != C)
      {
        Ext.fly(this.elNode).replaceClass(D, C);
        this.c1 = D;
        this.c2 = C
      }
    } else
    {
      if (!this.wasLeaf)
      {
        Ext.fly(this.elNode).replaceClass("x-tree-node-expanded", "x-tree-node-leaf");
        delete this.c1;
        delete this.c2;
        this.wasLeaf = true
      }
    }
    var B = "x-tree-ec-icon " + A;
    if (this.ecc != B)
    {
      this.ecNode.className = B;
      this.ecc = B
    }
  }
},getChildIndent:function()
{
  if (!this.childIndent)
  {
    var A = [];
    var B = this.node;
    while (B)
    {
      if (!B.isRoot || (B.isRoot && B.ownerTree.rootVisible))
      {
        if (!B.isLast())
        {
          A.unshift("<img src=\"" + this.emptyIcon + "\" class=\"x-tree-elbow-line\" />")
        } else
        {
          A.unshift("<img src=\"" + this.emptyIcon + "\" class=\"x-tree-icon\" />")
        }
      }
      B = B.parentNode
    }
    this.childIndent = A.join("")
  }
  return this.childIndent
},renderIndent:function()
{
  if (this.rendered)
  {
    var A = "";
    var B = this.node.parentNode;
    if (B)
    {
      A = B.ui.getChildIndent()
    }
    if (this.indentMarkup != A)
    {
      this.indentNode.innerHTML = A;
      this.indentMarkup = A
    }
    this.updateExpandIcon()
  }
}};
Ext.tree.RootTreeNodeUI = function()
{
  Ext.tree.RootTreeNodeUI.superclass.constructor.apply(this, arguments)
};
Ext.extend(Ext.tree.RootTreeNodeUI, Ext.tree.TreeNodeUI, {render:function()
{
  if (!this.rendered)
  {
    var A = this.node.ownerTree.innerCt.dom;
    this.node.expanded = true;
    A.innerHTML = "<div class=\"x-tree-root-node\"></div>";
    this.wrap = this.ctNode = A.firstChild
  }
},collapse:function()
{
},expand:function()
{
}});
Ext.tree.TreeLoader = function(A)
{
  this.baseParams = {};
  this.requestMethod = "POST";
  Ext.apply(this, A);
  this.addEvents({"beforeload":true,"load":true,"loadexception":true});
  Ext.tree.TreeLoader.superclass.constructor.call(this)
};
Ext.extend(Ext.tree.TreeLoader, Ext.util.Observable, {uiProviders:{},clearOnLoad:true,load:function(D, E)
{
  if (this.clearOnLoad)
  {
    while (D.firstChild)
    {
      D.removeChild(D.firstChild)
    }
  }
  if (D.attributes.children)
  {
    var C = D.attributes.children;
    for (var B = 0,A = C.length; B < A; B++)
    {
      D.appendChild(this.createNode(C[B]))
    }
    if (typeof E == "function")
    {
      E()
    }
  } else
  {
    if (this.dataUrl)
    {
      this.requestData(D, E)
    }
  }
},getParams:function(D)
{
  var A = [],C = this.baseParams;
  for (var B in C)
  {
    if (typeof C[B] != "function")
    {
      A.push(encodeURIComponent(B), "=", encodeURIComponent(C[B]), "&")
    }
  }
  A.push("node=", encodeURIComponent(D.id));
  return A.join("")
},requestData:function(A, B)
{
  if (this.fireEvent("beforeload", this, A, B) !== false)
  {
    this.transId = Ext.Ajax.request({method:this.requestMethod,url:this.dataUrl || this.url,success:this.handleResponse,failure:this.handleFailure,scope:this,argument:{callback:B,node:A},params:this.getParams(A)})
  } else
  {
    if (typeof B == "function")
    {
      B()
    }
  }
},isLoading:function()
{
  return this.transId ? true : false
},abort:function()
{
  if (this.isLoading())
  {
    Ext.Ajax.abort(this.transId)
  }
},createNode:function(attr)
{
  if (this.baseAttrs)
  {
    Ext.applyIf(attr, this.baseAttrs)
  }
  if (this.applyLoader !== false)
  {
    attr.loader = this
  }
  if (typeof attr.uiProvider == "string")
  {
    attr.uiProvider = this.uiProviders[attr.uiProvider] || eval(attr.uiProvider)
  }
  return(attr.leaf ? new Ext.tree.TreeNode(attr) : new Ext.tree.AsyncTreeNode(attr))
},processResponse:function(response, node, callback)
{
  var json = response.responseText;
  try
  {
    var o = eval("(" + json + ")");
    for (var i = 0,len = o.length; i < len; i++)
    {
      var n = this.createNode(o[i]);
      if (n)
      {
        node.appendChild(n)
      }
    }
    if (typeof callback == "function")
    {
      callback(this, node)
    }
  } catch(e)
  {
    this.handleFailure(response)
  }
},handleResponse:function(B)
{
  this.transId = false;
  var A = B.argument;
  this.processResponse(B, A.node, A.callback);
  this.fireEvent("load", this, A.node, B)
},handleFailure:function(B)
{
  this.transId = false;
  var A = B.argument;
  this.fireEvent("loadexception", this, A.node, B);
  if (typeof A.callback == "function")
  {
    A.callback(this, A.node)
  }
}});
Ext.tree.TreeFilter = function(A, B)
{
  this.tree = A;
  this.filtered = {};
  Ext.apply(this, B)
};
Ext.tree.TreeFilter.prototype = {clearBlank:false,reverse:false,autoClear:false,remove:false,filter:function(D, A, B)
{
  A = A || "text";
  var C;
  if (typeof D == "string")
  {
    var E = D.length;
    if (E == 0 && this.clearBlank)
    {
      this.clear();
      return
    }
    D = D.toLowerCase();
    C = function(F)
    {
      return F.attributes[A].substr(0, E).toLowerCase() == D
    }
  } else
  {
    if (D.exec)
    {
      C = function(F)
      {
        return D.test(F.attributes[A])
      }
    } else
    {
      throw"Illegal filter type, must be string or regex"
    }
  }
  this.filterBy(C, null, B)
},filterBy:function(D, C, B)
{
  B = B || this.tree.root;
  if (this.autoClear)
  {
    this.clear()
  }
  var A = this.filtered,H = this.reverse;
  var E = function(J)
  {
    if (J == B)
    {
      return true
    }
    if (A[J.id])
    {
      return false
    }
    var I = D.call(C || J, J);
    if (!I || H)
    {
      A[J.id] = J;
      J.ui.hide();
      return false
    }
    return true
  };
  B.cascade(E);
  if (this.remove)
  {
    for (var G in A)
    {
      if (typeof G != "function")
      {
        var F = A[G];
        if (F && F.parentNode)
        {
          F.parentNode.removeChild(F)
        }
      }
    }
  }
},clear:function()
{
  var B = this.tree;
  var A = this.filtered;
  for (var D in A)
  {
    if (typeof D != "function")
    {
      var C = A[D];
      if (C)
      {
        C.ui.show()
      }
    }
  }
  this.filtered = {}
}};
Ext.tree.TreeSorter = function(B, C)
{
  Ext.apply(this, C);
  B.on("beforechildrenrendered", this.doSort, this);
  B.on("append", this.updateSort, this);
  B.on("insert", this.updateSort, this);
  var E = this.dir && this.dir.toLowerCase() == "desc";
  var F = this.property || "text";
  var G = this.sortType;
  var A = this.folderSort;
  var D = this.caseSensitive === true;
  var H = this.leafAttr || "leaf";
  this.sortFn = function(J, I)
  {
    if (A)
    {
      if (J.attributes[H] && !I.attributes[H])
      {
        return 1
      }
      if (!J.attributes[H] && I.attributes[H])
      {
        return -1
      }
    }
    var L = G ? G(J) : (D ? J.attributes[F] : J.attributes[F].toUpperCase());
    var K = G ? G(I) : (D ? I.attributes[F] : I.attributes[F].toUpperCase());
    if (L < K)
    {
      return E ? +1 : -1
    } else
    {
      if (L > K)
      {
        return E ? -1 : +1
      } else
      {
        return 0
      }
    }
  }
};
Ext.tree.TreeSorter.prototype = {doSort:function(A)
{
  A.sort(this.sortFn)
},compareNodes:function(B, A)
{
  return(B.text.toUpperCase() > A.text.toUpperCase() ? 1 : -1)
},updateSort:function(A, B)
{
  if (B.childrenRendered)
  {
    this.doSort.defer(1, this, [B])
  }
}};
if (Ext.dd.DropZone)
{
  Ext.tree.TreeDropZone = function(A, B)
  {
    this.allowParentInsert = false;
    this.allowContainerDrop = false;
    this.appendOnly = false;
    Ext.tree.TreeDropZone.superclass.constructor.call(this, A.innerCt, B);
    this.tree = A;
    this.lastInsertClass = "x-tree-no-status";
    this.dragOverData = {}
  };
  Ext.extend(Ext.tree.TreeDropZone, Ext.dd.DropZone, {ddGroup:"TreeDD",expandDelay:1000,expandNode:function(A)
  {
    if (A.hasChildNodes() && !A.isExpanded())
    {
      A.expand(false, null, this.triggerCacheRefresh.createDelegate(this))
    }
  },queueExpand:function(A)
  {
    this.expandProcId = this.expandNode.defer(this.expandDelay, this, [A])
  },cancelExpand:function()
  {
    if (this.expandProcId)
    {
      clearTimeout(this.expandProcId);
      this.expandProcId = false
    }
  },isValidDropPoint:function(A, I, G, D, C)
  {
    if (!A || !C)
    {
      return false
    }
    var E = A.node;
    var F = C.node;
    if (!(E && E.isTarget && I))
    {
      return false
    }
    if (I == "append" && E.allowChildren === false)
    {
      return false
    }
    if ((I == "above" || I == "below") && (E.parentNode && E.parentNode.allowChildren === false))
    {
      return false
    }
    if (F && (E == F || F.contains(E)))
    {
      return false
    }
    var B = this.dragOverData;
    B.tree = this.tree;
    B.target = E;
    B.data = C;
    B.point = I;
    B.source = G;
    B.rawEvent = D;
    B.dropNode = F;
    B.cancel = false;
    var H = this.tree.fireEvent("nodedragover", B);
    return B.cancel === false && H !== false
  },getDropPoint:function(E, D, I)
  {
    var J = D.node;
    if (J.isRoot)
    {
      return J.allowChildren !== false ? "append" : false
    }
    var B = D.ddel;
    var K = Ext.lib.Dom.getY(B),G = K + B.offsetHeight;
    var F = Ext.lib.Event.getPageY(E);
    var H = J.allowChildren === false || J.isLeaf();
    if (this.appendOnly || J.parentNode.allowChildren === false)
    {
      return H ? false : "append"
    }
    var C = false;
    if (!this.allowParentInsert)
    {
      C = J.hasChildNodes() && J.isExpanded()
    }
    var A = (G - K) / (H ? 2 : 3);
    if (F >= K && F < (K + A))
    {
      return"above"
    } else
    {
      if (!C && (H || F >= G - A && F <= G))
      {
        return"below"
      } else
      {
        return"append"
      }
    }
  },onNodeEnter:function(D, A, C, B)
  {
    this.cancelExpand()
  },onNodeOver:function(B, G, F, E)
  {
    var I = this.getDropPoint(F, B, G);
    var C = B.node;
    if (!this.expandProcId && I == "append" && C.hasChildNodes() && !B.node.isExpanded())
    {
      this.queueExpand(C)
    } else
    {
      if (I != "append")
      {
        this.cancelExpand()
      }
    }
    var D = this.dropNotAllowed;
    if (this.isValidDropPoint(B, I, G, F, E))
    {
      if (I)
      {
        var A = B.ddel;
        var H;
        if (I == "above")
        {
          D = B.node.isFirst() ? "x-tree-drop-ok-above" : "x-tree-drop-ok-between";
          H = "x-tree-drag-insert-above"
        } else
        {
          if (I == "below")
          {
            D = B.node.isLast() ? "x-tree-drop-ok-below" : "x-tree-drop-ok-between";
            H = "x-tree-drag-insert-below"
          } else
          {
            D = "x-tree-drop-ok-append";
            H = "x-tree-drag-append"
          }
        }
        if (this.lastInsertClass != H)
        {
          Ext.fly(A).replaceClass(this.lastInsertClass, H);
          this.lastInsertClass = H
        }
      }
    }
    return D
  },onNodeOut:function(D, A, C, B)
  {
    this.cancelExpand();
    this.removeDropIndicators(D)
  },onNodeDrop:function(C, I, E, D)
  {
    var H = this.getDropPoint(E, C, I);
    var F = C.node;
    F.ui.startDrop();
    if (!this.isValidDropPoint(C, H, I, E, D))
    {
      F.ui.endDrop();
      return false
    }
    var G = D.node || (I.getTreeNode ? I.getTreeNode(D, F, H, E) : null);
    var B = {tree:this.tree,target:F,data:D,point:H,source:I,rawEvent:E,dropNode:G,cancel:!G};
    var A = this.tree.fireEvent("beforenodedrop", B);
    if (A === false || B.cancel === true || !B.dropNode)
    {
      F.ui.endDrop();
      return false
    }
    F = B.target;
    if (H == "append" && !F.isExpanded())
    {
      F.expand(false, null, function()
      {
        this.completeDrop(B)
      }.createDelegate(this))
    } else
    {
      this.completeDrop(B)
    }
    return true
  },completeDrop:function(G)
  {
    var D = G.dropNode,E = G.point,C = G.target;
    if (!(D instanceof Array))
    {
      D = [D]
    }
    var F;
    for (var B = 0,A = D.length; B < A; B++)
    {
      F = D[B];
      if (E == "above")
      {
        C.parentNode.insertBefore(F, C)
      } else
      {
        if (E == "below")
        {
          C.parentNode.insertBefore(F, C.nextSibling)
        } else
        {
          C.appendChild(F)
        }
      }
    }
    F.ui.focus();
    if (this.tree.hlDrop)
    {
      F.ui.highlight()
    }
    C.ui.endDrop();
    this.tree.fireEvent("nodedrop", G)
  },afterNodeMoved:function(A, C, E, D, B)
  {
    if (this.tree.hlDrop)
    {
      B.ui.focus();
      B.ui.highlight()
    }
    this.tree.fireEvent("nodedrop", this.tree, D, C, A, E)
  },getTree:function()
  {
    return this.tree
  },removeDropIndicators:function(B)
  {
    if (B && B.ddel)
    {
      var A = B.ddel;
      Ext.fly(A).removeClass(["x-tree-drag-insert-above","x-tree-drag-insert-below","x-tree-drag-append"]);
      this.lastInsertClass = "_noclass"
    }
  },beforeDragDrop:function(B, A, C)
  {
    this.cancelExpand();
    return true
  },afterRepair:function(A)
  {
    if (A && Ext.enableFx)
    {
      A.node.ui.highlight()
    }
    this.hideProxy()
  }})
}
;
if (Ext.dd.DragZone)
{
  Ext.tree.TreeDragZone = function(A, B)
  {
    Ext.tree.TreeDragZone.superclass.constructor.call(this, A.getTreeEl(), B);
    this.tree = A
  };
  Ext.extend(Ext.tree.TreeDragZone, Ext.dd.DragZone, {ddGroup:"TreeDD",onBeforeDrag:function(A, B)
  {
    var C = A.node;
    return C && C.draggable && !C.disabled
  },onInitDrag:function(B)
  {
    var A = this.dragData;
    this.tree.getSelectionModel().select(A.node);
    this.proxy.update("");
    A.node.ui.appendDDGhost(this.proxy.ghost.dom);
    this.tree.fireEvent("startdrag", this.tree, A.node, B)
  },getRepairXY:function(B, A)
  {
    return A.node.ui.getDDRepairXY()
  },onEndDrag:function(A, B)
  {
    this.tree.fireEvent("enddrag", this.tree, A.node, B)
  },onValidDrop:function(A, B, C)
  {
    this.tree.fireEvent("dragdrop", this.tree, this.dragData.node, A, B);
    this.hideProxy()
  },beforeInvalidDrop:function(A, C)
  {
    var B = this.tree.getSelectionModel();
    B.clearSelections();
    B.select(this.dragData.node)
  }})
}
;
Ext.tree.TreeEditor = function(A, B)
{
  B = B || {};
  var C = B.events ? B : new Ext.form.TextField(B);
  Ext.tree.TreeEditor.superclass.constructor.call(this, C);
  this.tree = A;
  A.on("beforeclick", this.beforeNodeClick, this);
  A.getTreeEl().on("mousedown", this.hide, this);
  this.on("complete", this.updateNode, this);
  this.on("beforestartedit", this.fitToTree, this);
  this.on("startedit", this.bindScroll, this, {delay:10});
  this.on("specialkey", this.onSpecialKey, this)
};
Ext.extend(Ext.tree.TreeEditor, Ext.Editor, {alignment:"l-l",autoSize:false,hideEl:false,cls:"x-small-editor x-tree-editor",shim:false,shadow:"frame",maxWidth:250,editDelay:350,fitToTree:function(B, C)
{
  var E = this.tree.getTreeEl().dom,D = C.dom;
  if (E.scrollLeft > D.offsetLeft)
  {
    E.scrollLeft = D.offsetLeft
  }
  var A = Math.min(this.maxWidth, (E.clientWidth > 20 ? E.clientWidth : E.offsetWidth) - Math.max(0, D.offsetLeft - E.scrollLeft) - 5);
  this.setSize(A, "")
},triggerEdit:function(A)
{
  this.completeEdit();
  this.editNode = A;
  this.startEdit(A.ui.textNode, A.text)
},bindScroll:function()
{
  this.tree.getTreeEl().on("scroll", this.cancelEdit, this)
},beforeNodeClick:function(B, C)
{
  var A = (this.lastClick ? this.lastClick.getElapsed() : 0);
  this.lastClick = new Date();
  if (A > this.editDelay && this.tree.getSelectionModel().isSelected(B))
  {
    C.stopEvent();
    this.triggerEdit(B);
    return false
  }
},updateNode:function(A, B)
{
  this.tree.getTreeEl().un("scroll", this.cancelEdit, this);
  this.editNode.setText(B)
},onHide:function()
{
  Ext.tree.TreeEditor.superclass.onHide.call(this);
  if (this.editNode)
  {
    this.editNode.ui.focus()
  }
},onSpecialKey:function(C, B)
{
  var A = B.getKey();
  if (A == B.ESC)
  {
    B.stopEvent();
    this.cancelEdit()
  } else
  {
    if (A == B.ENTER && !B.hasModifier())
    {
      B.stopEvent();
      this.completeEdit()
    }
  }
}});
Ext.menu.Menu = function(A)
{
  Ext.apply(this, A);
  this.id = this.id || Ext.id();
  this.addEvents({beforeshow:true,beforehide:true,show:true,hide:true,click:true,mouseover:true,mouseout:true,itemclick:true});
  Ext.menu.MenuMgr.register(this);
  var B = this.items;
  this.items = new Ext.util.MixedCollection();
  if (B)
  {
    this.add.apply(this, B)
  }
};
Ext.extend(Ext.menu.Menu, Ext.util.Observable, {minWidth:120,shadow:"sides",subMenuAlign:"tl-tr?",defaultAlign:"tl-bl?",allowOtherMenus:false,hidden:true,render:function()
{
  if (this.el)
  {
    return
  }
  var B = this.el = new Ext.Layer({cls:"x-menu",shadow:this.shadow,constrain:false,parentEl:this.parentEl || document.body,zindex:15000});
  this.keyNav = new Ext.menu.MenuNav(this);
  if (this.plain)
  {
    B.addClass("x-menu-plain")
  }
  if (this.cls)
  {
    B.addClass(this.cls)
  }
  this.focusEl = B.createChild({tag:"a",cls:"x-menu-focus",href:"#",onclick:"return false;",tabIndex:"-1"});
  var A = B.createChild({tag:"ul",cls:"x-menu-list"});
  A.on("click", this.onClick, this);
  A.on("mouseover", this.onMouseOver, this);
  A.on("mouseout", this.onMouseOut, this);
  this.items.each(function(D)
  {
    var C = document.createElement("li");
    C.className = "x-menu-list-item";
    A.dom.appendChild(C);
    D.render(C, this)
  }, this);
  this.ul = A;
  this.autoWidth()
},autoWidth:function()
{
  var D = this.el,C = this.ul;
  if (!D)
  {
    return
  }
  var A = this.width;
  if (A)
  {
    D.setWidth(A)
  } else
  {
    if (Ext.isIE)
    {
      D.setWidth(this.minWidth);
      var B = D.dom.offsetWidth;
      D.setWidth(C.getWidth() + D.getFrameWidth("lr"))
    }
  }
},delayAutoWidth:function()
{
  if (this.rendered)
  {
    if (!this.awTask)
    {
      this.awTask = new Ext.util.DelayedTask(this.autoWidth, this)
    }
    this.awTask.delay(20)
  }
},findTargetItem:function(B)
{
  var A = B.getTarget(".x-menu-list-item", this.ul, true);
  if (A && A.menuItemId)
  {
    return this.items.get(A.menuItemId)
  }
},onClick:function(B)
{
  var A;
  if (A = this.findTargetItem(B))
  {
    A.onClick(B);
    this.fireEvent("click", this, A, B)
  }
},setActiveItem:function(A, B)
{
  if (A != this.activeItem)
  {
    if (this.activeItem)
    {
      this.activeItem.deactivate()
    }
    this.activeItem = A;
    A.activate(B)
  } else
  {
    if (B)
    {
      A.expandMenu()
    }
  }
},tryActivate:function(F, E)
{
  var B = this.items;
  for (var C = F,A = B.length; C >= 0 && C < A; C += E)
  {
    var D = B.get(C);
    if (!D.disabled && D.canActivate)
    {
      this.setActiveItem(D, false);
      return D
    }
  }
  return false
},onMouseOver:function(B)
{
  var A;
  if (A = this.findTargetItem(B))
  {
    if (A.canActivate && !A.disabled)
    {
      this.setActiveItem(A, true)
    }
  }
  this.fireEvent("mouseover", this, B, A)
},onMouseOut:function(B)
{
  var A;
  if (A = this.findTargetItem(B))
  {
    if (A == this.activeItem && A.shouldDeactivate(B))
    {
      this.activeItem.deactivate();
      delete this.activeItem
    }
  }
  this.fireEvent("mouseout", this, B, A)
},isVisible:function()
{
  return this.el && !this.hidden
},show:function(B, C, A)
{
  this.parentMenu = A;
  if (!this.el)
  {
    this.render()
  }
  this.fireEvent("beforeshow", this);
  this.showAt(this.el.getAlignToXY(B, C || this.defaultAlign), A, false)
},showAt:function(C, B, A)
{
  this.parentMenu = B;
  if (!this.el)
  {
    this.render()
  }
  if (A !== false)
  {
    this.fireEvent("beforeshow", this);
    C = this.el.adjustForConstraints(C)
  }
  this.el.setXY(C);
  this.el.show();
  this.hidden = false;
  this.focus();
  this.fireEvent("show", this)
},focus:function()
{
  if (!this.hidden)
  {
    this.doFocus.defer(50, this)
  }
},doFocus:function()
{
  if (!this.hidden)
  {
    this.focusEl.focus()
  }
},hide:function(A)
{
  if (this.el && this.isVisible())
  {
    this.fireEvent("beforehide", this);
    if (this.activeItem)
    {
      this.activeItem.deactivate();
      this.activeItem = null
    }
    this.el.hide();
    this.hidden = true;
    this.fireEvent("hide", this)
  }
  if (A === true && this.parentMenu)
  {
    this.parentMenu.hide(true)
  }
},add:function()
{
  var B = arguments,A = B.length,E;
  for (var C = 0; C < A; C++)
  {
    var D = B[C];
    if (D.render)
    {
      E = this.addItem(D)
    } else
    {
      if (typeof D == "string")
      {
        if (D == "separator" || D == "-")
        {
          E = this.addSeparator()
        } else
        {
          E = this.addText(D)
        }
      } else
      {
        if (D.tagName || D.el)
        {
          E = this.addElement(D)
        } else
        {
          if (typeof D == "object")
          {
            E = this.addMenuItem(D)
          }
        }
      }
    }
  }
  return E
},getEl:function()
{
  if (!this.el)
  {
    this.render()
  }
  return this.el
},addSeparator:function()
{
  return this.addItem(new Ext.menu.Separator())
},addElement:function(A)
{
  return this.addItem(new Ext.menu.BaseItem(A))
},addItem:function(B)
{
  this.items.add(B);
  if (this.ul)
  {
    var A = document.createElement("li");
    A.className = "x-menu-list-item";
    this.ul.dom.appendChild(A);
    B.render(A, this);
    this.delayAutoWidth()
  }
  return B
},addMenuItem:function(A)
{
  if (!(A instanceof Ext.menu.Item))
  {
    if (typeof A.checked == "boolean")
    {
      A = new Ext.menu.CheckItem(A)
    } else
    {
      A = new Ext.menu.Item(A)
    }
  }
  return this.addItem(A)
},addText:function(A)
{
  return this.addItem(new Ext.menu.TextItem(A))
},insert:function(B, C)
{
  this.items.insert(B, C);
  if (this.ul)
  {
    var A = document.createElement("li");
    A.className = "x-menu-list-item";
    this.ul.dom.insertBefore(A, this.ul.dom.childNodes[B]);
    C.render(A, this);
    this.delayAutoWidth()
  }
  return C
},remove:function(A)
{
  this.items.removeKey(A.id);
  A.destroy()
},removeAll:function()
{
  var A;
  while (A = this.items.first())
  {
    this.remove(A)
  }
}});
Ext.menu.MenuNav = function(A)
{
  Ext.menu.MenuNav.superclass.constructor.call(this, A.el);
  this.scope = this.menu = A
};
Ext.extend(Ext.menu.MenuNav, Ext.KeyNav, {doRelay:function(C, B)
{
  var A = C.getKey();
  if (!this.menu.activeItem && C.isNavKeyPress() && A != C.SPACE && A != C.RETURN)
  {
    this.menu.tryActivate(0, 1);
    return false
  }
  return B.call(this.scope || this, C, this.menu)
},up:function(B, A)
{
  if (!A.tryActivate(A.items.indexOf(A.activeItem) - 1, -1))
  {
    A.tryActivate(A.items.length - 1, -1)
  }
},down:function(B, A)
{
  if (!A.tryActivate(A.items.indexOf(A.activeItem) + 1, 1))
  {
    A.tryActivate(0, 1)
  }
},right:function(B, A)
{
  if (A.activeItem)
  {
    A.activeItem.expandMenu(true)
  }
},left:function(B, A)
{
  A.hide();
  if (A.parentMenu && A.parentMenu.activeItem)
  {
    A.parentMenu.activeItem.activate()
  }
},enter:function(B, A)
{
  if (A.activeItem)
  {
    B.stopPropagation();
    A.activeItem.onClick(B);
    A.fireEvent("click", this, A.activeItem);
    return true
  }
}});
Ext.menu.MenuMgr = function()
{
  var F,D,C = {},A = false,K = new Date();
  function M()
  {
    F = {};
    D = new Ext.util.MixedCollection();
    Ext.get(document).addKeyListener(27, function()
    {
      if (D.length > 0)
      {
        H()
      }
    })
  }
  function H()
  {
    if (D && D.length > 0)
    {
      var N = D.clone();
      N.each(function(O)
      {
        O.hide()
      })
    }
  }
  function E(N)
  {
    D.remove(N);
    if (D.length < 1)
    {
      Ext.get(document).un("mousedown", L);
      A = false
    }
  }
  function J(N)
  {
    var O = D.last();
    K = new Date();
    D.add(N);
    if (!A)
    {
      Ext.get(document).on("mousedown", L);
      A = true
    }
    if (N.parentMenu)
    {
      N.getEl().setZIndex(parseInt(N.parentMenu.getEl().getStyle("z-index"), 10) + 3);
      N.parentMenu.activeChild = N
    } else
    {
      if (O && O.isVisible())
      {
        N.getEl().setZIndex(parseInt(O.getEl().getStyle("z-index"), 10) + 3)
      }
    }
  }
  function B(N)
  {
    if (N.activeChild)
    {
      N.activeChild.hide()
    }
    if (N.autoHideTimer)
    {
      clearTimeout(N.autoHideTimer);
      delete N.autoHideTimer
    }
  }
  function G(N)
  {
    var O = N.parentMenu;
    if (!O && !N.allowOtherMenus)
    {
      H()
    } else
    {
      if (O && O.activeChild)
      {
        O.activeChild.hide()
      }
    }
  }
  function L(N)
  {
    if (K.getElapsed() > 50 && D.length > 0 && !N.getTarget(".x-menu"))
    {
      H()
    }
  }
  function I(O, R)
  {
    if (R)
    {
      var Q = C[O.group];
      for (var P = 0,N = Q.length; P < N; P++)
      {
        if (Q[P] != O)
        {
          Q[P].setChecked(false)
        }
      }
    }
  }
  return{hideAll:function()
  {
    H()
  },register:function(O)
  {
    if (!F)
    {
      M()
    }
    F[O.id] = O;
    O.on("beforehide", B);
    O.on("hide", E);
    O.on("beforeshow", G);
    O.on("show", J);
    var N = O.group;
    if (N && O.events["checkchange"])
    {
      if (!C[N])
      {
        C[N] = []
      }
      C[N].push(O);
      O.on("checkchange", onCheck)
    }
  },get:function(N)
  {
    if (typeof N == "string")
    {
      return F[N]
    } else
    {
      if (N.events)
      {
        return N
      } else
      {
        if (typeof N.length == "number")
        {
          return new Ext.menu.Menu({items:N})
        } else
        {
          return new Ext.menu.Menu(N)
        }
      }
    }
  },unregister:function(O)
  {
    delete F[O.id];
    O.un("beforehide", B);
    O.un("hide", E);
    O.un("beforeshow", G);
    O.un("show", J);
    var N = O.group;
    if (N && O.events["checkchange"])
    {
      C[N].remove(O);
      O.un("checkchange", onCheck)
    }
  },registerCheckable:function(N)
  {
    var O = N.group;
    if (O)
    {
      if (!C[O])
      {
        C[O] = []
      }
      C[O].push(N);
      N.on("beforecheckchange", I)
    }
  },unregisterCheckable:function(N)
  {
    var O = N.group;
    if (O)
    {
      C[O].remove(N);
      N.un("beforecheckchange", I)
    }
  }}
}();
Ext.menu.BaseItem = function(A)
{
  Ext.menu.BaseItem.superclass.constructor.call(this, A);
  this.addEvents({click:true,activate:true,deactivate:true});
  if (this.handler)
  {
    this.on("click", this.handler, this.scope, true)
  }
};
Ext.extend(Ext.menu.BaseItem, Ext.Component, {canActivate:false,activeClass:"x-menu-item-active",hideOnClick:true,hideDelay:100,ctype:"Ext.menu.BaseItem",actionMode:"container",render:function(A, B)
{
  this.parentMenu = B;
  Ext.menu.BaseItem.superclass.render.call(this, A);
  this.container.menuItemId = this.id
},onRender:function(B, A)
{
  this.el = Ext.get(this.el);
  B.dom.appendChild(this.el.dom)
},onClick:function(A)
{
  if (!this.disabled && this.fireEvent("click", this, A) !== false && this.parentMenu.fireEvent("itemclick", this, A) !== false)
  {
    this.handleClick(A)
  } else
  {
    A.stopEvent()
  }
},activate:function()
{
  if (this.disabled)
  {
    return false
  }
  var A = this.container;
  A.addClass(this.activeClass);
  this.region = A.getRegion().adjust(2, 2, -2, -2);
  this.fireEvent("activate", this);
  return true
},deactivate:function()
{
  this.container.removeClass(this.activeClass);
  this.fireEvent("deactivate", this)
},shouldDeactivate:function(A)
{
  return !this.region || !this.region.contains(A.getPoint())
},handleClick:function(A)
{
  if (this.hideOnClick)
  {
    this.parentMenu.hide.defer(this.hideDelay, this.parentMenu, [true])
  }
},expandMenu:function(A)
{
},hideMenu:function()
{
}});
Ext.menu.TextItem = function(A)
{
  this.text = A;
  Ext.menu.TextItem.superclass.constructor.call(this)
};
Ext.extend(Ext.menu.TextItem, Ext.menu.BaseItem, {hideOnClick:false,itemCls:"x-menu-text",onRender:function()
{
  var A = document.createElement("span");
  A.className = this.itemCls;
  A.innerHTML = this.text;
  this.el = A;
  Ext.menu.TextItem.superclass.onRender.apply(this, arguments)
}});
Ext.menu.Separator = function(A)
{
  Ext.menu.Separator.superclass.constructor.call(this, A)
};
Ext.extend(Ext.menu.Separator, Ext.menu.BaseItem, {itemCls:"x-menu-sep",hideOnClick:false,onRender:function(A)
{
  var B = document.createElement("span");
  B.className = this.itemCls;
  B.innerHTML = "&#160;";
  this.el = B;
  A.addClass("x-menu-sep-li");
  Ext.menu.Separator.superclass.onRender.apply(this, arguments)
}});
Ext.menu.Item = function(A)
{
  Ext.menu.Item.superclass.constructor.call(this, A);
  if (this.menu)
  {
    this.menu = Ext.menu.MenuMgr.get(this.menu)
  }
};
Ext.extend(Ext.menu.Item, Ext.menu.BaseItem, {itemCls:"x-menu-item",canActivate:true,showDelay:200,hideDelay:200,ctype:"Ext.menu.Item",onRender:function(B, A)
{
  var C = document.createElement("a");
  C.hideFocus = true;
  C.unselectable = "on";
  C.href = this.href || "#";
  if (this.hrefTarget)
  {
    C.target = this.hrefTarget
  }
  C.className = this.itemCls + (this.menu ? " x-menu-item-arrow" : "") + (this.cls ? " " + this.cls : "");
  C.innerHTML = String.format("<img src=\"{0}\" class=\"x-menu-item-icon {2}\" />{1}", this.icon || Ext.BLANK_IMAGE_URL, this.text, this.iconCls || "");
  this.el = C;
  Ext.menu.Item.superclass.onRender.call(this, B, A)
},setText:function(A)
{
  this.text = A;
  if (this.rendered)
  {
    this.el.update(String.format("<img src=\"{0}\" class=\"x-menu-item-icon {2}\">{1}", this.icon || Ext.BLANK_IMAGE_URL, this.text, this.iconCls || ""));
    this.parentMenu.autoWidth()
  }
},handleClick:function(A)
{
  if (!this.href)
  {
    A.stopEvent()
  }
  Ext.menu.Item.superclass.handleClick.apply(this, arguments)
},activate:function(A)
{
  if (Ext.menu.Item.superclass.activate.apply(this, arguments))
  {
    this.focus();
    if (A)
    {
      this.expandMenu()
    }
  }
  return true
},shouldDeactivate:function(A)
{
  if (Ext.menu.Item.superclass.shouldDeactivate.call(this, A))
  {
    if (this.menu && this.menu.isVisible())
    {
      return !this.menu.getEl().getRegion().contains(A.getPoint())
    }
    return true
  }
  return false
},deactivate:function()
{
  Ext.menu.Item.superclass.deactivate.apply(this, arguments);
  this.hideMenu()
},expandMenu:function(A)
{
  if (!this.disabled && this.menu)
  {
    clearTimeout(this.hideTimer);
    delete this.hideTimer;
    if (!this.menu.isVisible() && !this.showTimer)
    {
      this.showTimer = this.deferExpand.defer(this.showDelay, this, [A])
    } else
    {
      if (this.menu.isVisible() && A)
      {
        this.menu.tryActivate(0, 1)
      }
    }
  }
},deferExpand:function(A)
{
  delete this.showTimer;
  this.menu.show(this.container, this.parentMenu.subMenuAlign || "tl-tr?", this.parentMenu);
  if (A)
  {
    this.menu.tryActivate(0, 1)
  }
},hideMenu:function()
{
  clearTimeout(this.showTimer);
  delete this.showTimer;
  if (!this.hideTimer && this.menu && this.menu.isVisible())
  {
    this.hideTimer = this.deferHide.defer(this.hideDelay, this)
  }
},deferHide:function()
{
  delete this.hideTimer;
  this.menu.hide()
}});
Ext.menu.CheckItem = function(A)
{
  Ext.menu.CheckItem.superclass.constructor.call(this, A);
  this.addEvents({"beforecheckchange":true,"checkchange":true});
  if (this.checkHandler)
  {
    this.on("checkchange", this.checkHandler, this.scope)
  }
};
Ext.extend(Ext.menu.CheckItem, Ext.menu.Item, {itemCls:"x-menu-item x-menu-check-item",groupClass:"x-menu-group-item",checked:false,ctype:"Ext.menu.CheckItem",onRender:function(A)
{
  Ext.menu.CheckItem.superclass.onRender.apply(this, arguments);
  if (this.group)
  {
    this.el.addClass(this.groupClass)
  }
  Ext.menu.MenuMgr.registerCheckable(this);
  if (this.checked)
  {
    this.checked = false;
    this.setChecked(true, true)
  }
},destroy:function()
{
  if (this.rendered)
  {
    Ext.menu.MenuMgr.unregisterCheckable(this)
  }
  Ext.menu.CheckItem.superclass.destroy.apply(this, arguments)
},setChecked:function(B, A)
{
  if (this.checked != B && this.fireEvent("beforecheckchange", this, B) !== false)
  {
    if (this.container)
    {
      this.container[B ? "addClass" : "removeClass"]("x-menu-item-checked")
    }
    this.checked = B;
    if (A !== true)
    {
      this.fireEvent("checkchange", this, B)
    }
  }
},handleClick:function(A)
{
  if (!this.disabled && !(this.checked && this.group))
  {
    this.setChecked(!this.checked)
  }
  Ext.menu.CheckItem.superclass.handleClick.apply(this, arguments)
}});
Ext.menu.Adapter = function(B, A)
{
  Ext.menu.Adapter.superclass.constructor.call(this, A);
  this.component = B
};
Ext.extend(Ext.menu.Adapter, Ext.menu.BaseItem, {canActivate:true,onRender:function(B, A)
{
  this.component.render(B);
  this.el = this.component.getEl()
},activate:function()
{
  if (this.disabled)
  {
    return false
  }
  this.component.focus();
  this.fireEvent("activate", this);
  return true
},deactivate:function()
{
  this.fireEvent("deactivate", this)
},disable:function()
{
  this.component.disable();
  Ext.menu.Adapter.superclass.disable.call(this)
},enable:function()
{
  this.component.enable();
  Ext.menu.Adapter.superclass.enable.call(this)
}});
Ext.menu.DateItem = function(A)
{
  Ext.menu.DateItem.superclass.constructor.call(this, new Ext.DatePicker(A), A);
  this.picker = this.component;
  this.addEvents({select:true});
  this.picker.on("render", function(B)
  {
    B.getEl().swallowEvent("click");
    B.container.addClass("x-menu-date-item")
  });
  this.picker.on("select", this.onSelect, this)
};
Ext.extend(Ext.menu.DateItem, Ext.menu.Adapter, {onSelect:function(B, A)
{
  this.fireEvent("select", this, A, B);
  Ext.menu.DateItem.superclass.handleClick.call(this)
}});
Ext.menu.ColorItem = function(A)
{
  Ext.menu.ColorItem.superclass.constructor.call(this, new Ext.ColorPalette(A), A);
  this.palette = this.component;
  this.relayEvents(this.palette, ["select"]);
  if (this.selectHandler)
  {
    this.on("select", this.selectHandler, this.scope)
  }
};
Ext.extend(Ext.menu.ColorItem, Ext.menu.Adapter);
Ext.menu.DateMenu = function(A)
{
  Ext.menu.DateMenu.superclass.constructor.call(this, A);
  this.plain = true;
  var B = new Ext.menu.DateItem(A);
  this.add(B);
  this.picker = B.picker;
  this.relayEvents(B, ["select"]);
  this.on("beforeshow", function()
  {
    if (this.picker)
    {
      this.picker.hideMonthPicker(true)
    }
  }, this)
};
Ext.extend(Ext.menu.DateMenu, Ext.menu.Menu, {cls:"x-date-menu"});
Ext.menu.ColorMenu = function(A)
{
  Ext.menu.ColorMenu.superclass.constructor.call(this, A);
  this.plain = true;
  var B = new Ext.menu.ColorItem(A);
  this.add(B);
  this.palette = B.palette;
  this.relayEvents(B, ["select"])
};
Ext.extend(Ext.menu.ColorMenu, Ext.menu.Menu);
Ext.form.Field = function(A)
{
  Ext.form.Field.superclass.constructor.call(this, A)
};
Ext.extend(Ext.form.Field, Ext.BoxComponent, {invalidClass:"x-form-invalid",invalidText:"The value in this field is invalid",focusClass:"x-form-focus",validationEvent:"keyup",validateOnBlur:true,validationDelay:250,defaultAutoCreate:{tag:"input",type:"text",size:"20",autocomplete:"off"},fieldClass:"x-form-field",msgTarget:"qtip",msgFx:"normal",readOnly:false,disabled:false,inputType:undefined,tabIndex:undefined,isFormField:true,hasFocus:false,value:undefined,initComponent:function()
{
  Ext.form.Field.superclass.initComponent.call(this);
  this.addEvents({focus:true,blur:true,specialkey:true,change:true,invalid:true,valid:true})
},getName:function()
{
  return this.rendered && this.el.dom.name ? this.el.dom.name : (this.hiddenName || "")
},onRender:function(C, A)
{
  Ext.form.Field.superclass.onRender.call(this, C, A);
  if (!this.el)
  {
    var B = this.getAutoCreate();
    if (!B.name)
    {
      B.name = this.name || this.id
    }
    if (this.inputType)
    {
      B.type = this.inputType
    }
    this.el = C.createChild(B, A)
  }
  var D = this.el.dom.type;
  if (D)
  {
    if (D == "password")
    {
      D = "text"
    }
    this.el.addClass("x-form-" + D)
  }
  if (this.readOnly)
  {
    this.el.dom.readOnly = true
  }
  if (this.tabIndex !== undefined)
  {
    this.el.dom.setAttribute("tabIndex", this.tabIndex)
  }
  this.el.addClass([this.fieldClass,this.cls]);
  this.initValue()
},applyTo:function(A)
{
  this.allowDomMove = false;
  this.el = Ext.get(A);
  this.render(this.el.dom.parentNode);
  return this
},initValue:function()
{
  if (this.value !== undefined)
  {
    this.setValue(this.value)
  } else
  {
    if (this.el.dom.value.length > 0)
    {
      this.setValue(this.el.dom.value)
    }
  }
},isDirty:function()
{
  if (this.disabled)
  {
    return false
  }
  return String(this.getValue()) !== String(this.originalValue)
},afterRender:function()
{
  Ext.form.Field.superclass.afterRender.call(this);
  this.initEvents()
},fireKey:function(A)
{
  if (A.isNavKeyPress())
  {
    this.fireEvent("specialkey", this, A)
  }
},reset:function()
{
  this.setValue(this.originalValue);
  this.clearInvalid()
},initEvents:function()
{
  this.el.on(Ext.isIE ? "keydown" : "keypress", this.fireKey, this);
  this.el.on("focus", this.onFocus, this);
  this.el.on("blur", this.onBlur, this);
  this.originalValue = this.getValue()
},onFocus:function()
{
  if (!Ext.isOpera && this.focusClass)
  {
    this.el.addClass(this.focusClass)
  }
  if (!this.hasFocus)
  {
    this.hasFocus = true;
    this.startValue = this.getValue();
    this.fireEvent("focus", this)
  }
},beforeBlur:Ext.emptyFn,onBlur:function()
{
  this.beforeBlur();
  if (!Ext.isOpera && this.focusClass)
  {
    this.el.removeClass(this.focusClass)
  }
  this.hasFocus = false;
  if (this.validationEvent !== false && this.validateOnBlur && this.validationEvent != "blur")
  {
    this.validate()
  }
  var A = this.getValue();
  if (String(A) !== String(this.startValue))
  {
    this.fireEvent("change", this, A, this.startValue)
  }
  this.fireEvent("blur", this)
},isValid:function(A)
{
  if (this.disabled)
  {
    return true
  }
  var C = this.preventMark;
  this.preventMark = A === true;
  var B = this.validateValue(this.processValue(this.getRawValue()));
  this.preventMark = C;
  return B
},validate:function()
{
  if (this.disabled || this.validateValue(this.processValue(this.getRawValue())))
  {
    this.clearInvalid();
    return true
  }
  return false
},processValue:function(A)
{
  return A
},validateValue:function(A)
{
  return true
},markInvalid:function(C)
{
  if (!this.rendered || this.preventMark)
  {
    return
  }
  this.el.addClass(this.invalidClass);
  C = C || this.invalidText;
  switch (this.msgTarget)
      {case"qtip":this.el.dom.qtip = C;this.el.dom.qclass = "x-form-invalid-tip";if (Ext.QuickTips)
  {
    Ext.QuickTips.enable()
  }break;case"title":this.el.dom.title = C;break;case"under":if (!this.errorEl)
  {
    var B = this.el.findParent(".x-form-element", 5, true);
    this.errorEl = B.createChild({cls:"x-form-invalid-msg"});
    this.errorEl.setWidth(B.getWidth(true) - 20)
  }this.errorEl.update(C);Ext.form.Field.msgFx[this.msgFx].show(this.errorEl, this);break;case"side":if (!this.errorIcon)
  {
    var B = this.el.findParent(".x-form-element", 5, true);
    this.errorIcon = B.createChild({cls:"x-form-invalid-icon"})
  }this.alignErrorIcon();this.errorIcon.dom.qtip = C;this.errorIcon.dom.qclass = "x-form-invalid-tip";this.errorIcon.show();this.on("resize", this.alignErrorIcon, this);break;default:var A = Ext.getDom(this.msgTarget);A.innerHTML = C;A.style.display = this.msgDisplay;break}
  this.fireEvent("invalid", this, C)
},alignErrorIcon:function()
{
  this.errorIcon.alignTo(this.el, "tl-tr", [2,0])
},clearInvalid:function()
{
  if (!this.rendered || this.preventMark)
  {
    return
  }
  this.el.removeClass(this.invalidClass);
  switch (this.msgTarget)
      {case"qtip":this.el.dom.qtip = "";break;case"title":this.el.dom.title = "";break;case"under":if (this.errorEl)
  {
    Ext.form.Field.msgFx[this.msgFx].hide(this.errorEl, this)
  }break;case"side":if (this.errorIcon)
  {
    this.errorIcon.dom.qtip = "";
    this.errorIcon.hide();
    this.un("resize", this.alignErrorIcon, this)
  }break;default:var A = Ext.getDom(this.msgTarget);A.innerHTML = "";A.style.display = "none";break}
  this.fireEvent("valid", this)
},getRawValue:function()
{
  var A = this.el.getValue();
  if (A === this.emptyText)
  {
    A = ""
  }
  return A
},getValue:function()
{
  var A = this.el.getValue();
  if (A === this.emptyText || A === undefined)
  {
    A = ""
  }
  return A
},setRawValue:function(A)
{
  return this.el.dom.value = (A === null || A === undefined ? "" : A)
},setValue:function(A)
{
  this.value = A;
  if (this.rendered)
  {
    this.el.dom.value = (A === null || A === undefined ? "" : A);
    this.validate()
  }
},adjustSize:function(A, C)
{
  var B = Ext.form.Field.superclass.adjustSize.call(this, A, C);
  B.width = this.adjustWidth(this.el.dom.tagName, B.width);
  return B
},adjustWidth:function(A, B)
{
  A = A.toLowerCase();
  if (typeof B == "number" && Ext.isStrict && !Ext.isSafari)
  {
    if (Ext.isIE && (A == "input" || A == "textarea"))
    {
      if (A == "input")
      {
        return B + 2
      }
      if (A = "textarea")
      {
        return B - 2
      }
    } else
    {
      if (Ext.isOpera)
      {
        if (A == "input")
        {
          return B + 2
        }
        if (A = "textarea")
        {
          return B - 2
        }
      }
    }
  }
  return B
}});
Ext.form.Field.msgFx = {normal:{show:function(A, B)
{
  A.setDisplayed("block")
},hide:function(A, B)
{
  A.setDisplayed(false).update("")
}},slide:{show:function(A, B)
{
  A.slideIn("t", {stopFx:true})
},hide:function(A, B)
{
  A.slideOut("t", {stopFx:true,useDisplay:true})
}},slideRight:{show:function(A, B)
{
  A.fixDisplay();
  A.alignTo(B.el, "tl-tr");
  A.slideIn("l", {stopFx:true})
},hide:function(A, B)
{
  A.slideOut("l", {stopFx:true,useDisplay:true})
}}};
Ext.form.TextField = function(A)
{
  Ext.form.TextField.superclass.constructor.call(this, A);
  this.addEvents({autosize:true})
};
Ext.extend(Ext.form.TextField, Ext.form.Field, {grow:false,growMin:30,growMax:800,vtype:null,maskRe:null,disableKeyFilter:false,allowBlank:true,minLength:0,maxLength:Number.MAX_VALUE,minLengthText:"The minimum length for this field is {0}",maxLengthText:"The maximum length for this field is {0}",selectOnFocus:false,blankText:"This field is required",validator:null,regex:null,regexText:"",emptyText:null,emptyClass:"x-form-empty-field",initEvents:function()
{
  Ext.form.TextField.superclass.initEvents.call(this);
  if (this.validationEvent == "keyup")
  {
    this.validationTask = new Ext.util.DelayedTask(this.validate, this);
    this.el.on("keyup", this.filterValidation, this)
  } else
  {
    if (this.validationEvent !== false)
    {
      this.el.on(this.validationEvent, this.validate, this, {buffer:this.validationDelay})
    }
  }
  if (this.selectOnFocus || this.emptyText)
  {
    this.on("focus", this.preFocus, this);
    if (this.emptyText)
    {
      this.on("blur", this.postBlur, this);
      this.applyEmptyText()
    }
  }
  if (this.maskRe || (this.vtype && this.disableKeyFilter !== true && (this.maskRe = Ext.form.VTypes[this.vtype + "Mask"])))
  {
    this.el.on("keypress", this.filterKeys, this)
  }
  if (this.grow)
  {
    this.el.on("keyup", this.onKeyUp, this, {buffer:50});
    this.el.on("click", this.autoSize, this)
  }
},processValue:function(A)
{
  if (this.stripCharsRe)
  {
    var B = A.replace(this.stripCharsRe, "");
    if (B !== A)
    {
      this.setRawValue(B);
      return B
    }
  }
  return A
},filterValidation:function(A)
{
  if (!A.isNavKeyPress())
  {
    this.validationTask.delay(this.validationDelay)
  }
},onKeyUp:function(A)
{
  if (!A.isNavKeyPress())
  {
    this.autoSize()
  }
},reset:function()
{
  Ext.form.TextField.superclass.reset.call(this);
  this.applyEmptyText()
},applyEmptyText:function()
{
  if (this.rendered && this.emptyText && this.getRawValue().length < 1)
  {
    this.setRawValue(this.emptyText);
    this.el.addClass(this.emptyClass)
  }
},preFocus:function()
{
  if (this.emptyText)
  {
    if (this.el.dom.value == this.emptyText)
    {
      this.setRawValue("")
    }
    this.el.removeClass(this.emptyClass)
  }
  if (this.selectOnFocus)
  {
    this.el.dom.select()
  }
},postBlur:function()
{
  this.applyEmptyText()
},filterKeys:function(B)
{
  var A = B.getKey();
  if (!Ext.isIE && (B.isNavKeyPress() || A == B.BACKSPACE || (A == B.DELETE && B.button == -1)))
  {
    return
  }
  var D = B.getCharCode(),C = String.fromCharCode(D);
  if (Ext.isIE && (B.isSpecialKey() || !C))
  {
    return
  }
  if (!this.maskRe.test(C))
  {
    B.stopEvent()
  }
},setValue:function(A)
{
  if (this.emptyText && this.el && A !== undefined && A !== null && A !== "")
  {
    this.el.removeClass(this.emptyClass)
  }
  Ext.form.TextField.superclass.setValue.apply(this, arguments);
  this.applyEmptyText();
  this.autoSize()
},validateValue:function(A)
{
  if (A.length < 1 || A === this.emptyText)
  {
    if (this.allowBlank)
    {
      this.clearInvalid();
      return true
    } else
    {
      this.markInvalid(this.blankText);
      return false
    }
  }
  if (A.length < this.minLength)
  {
    this.markInvalid(String.format(this.minLengthText, this.minLength));
    return false
  }
  if (A.length > this.maxLength)
  {
    this.markInvalid(String.format(this.maxLengthText, this.maxLength));
    return false
  }
  if (this.vtype)
  {
    var C = Ext.form.VTypes;
    if (!C[this.vtype](A, this))
    {
      this.markInvalid(this.vtypeText || C[this.vtype + "Text"]);
      return false
    }
  }
  if (typeof this.validator == "function")
  {
    var B = this.validator(A);
    if (B !== true)
    {
      this.markInvalid(B);
      return false
    }
  }
  if (this.regex && !this.regex.test(A))
  {
    this.markInvalid(this.regexText);
    return false
  }
  return true
},selectText:function(E, A)
{
  var C = this.getRawValue();
  if (C.length > 0)
  {
    E = E === undefined ? 0 : E;
    A = A === undefined ? C.length : A;
    var D = this.el.dom;
    if (D.setSelectionRange)
    {
      D.setSelectionRange(E, A)
    } else
    {
      if (D.createTextRange)
      {
        var B = D.createTextRange();
        B.moveStart("character", E);
        B.moveEnd("character", C.length - A);
        B.select()
      }
    }
  }
},autoSize:function()
{
  if (!this.grow || !this.rendered)
  {
    return
  }
  if (!this.metrics)
  {
    this.metrics = Ext.util.TextMetrics.createInstance(this.el)
  }
  var C = this.el;
  var B = C.dom.value;
  var D = document.createElement("div");
  D.appendChild(document.createTextNode(B));
  B = D.innerHTML;
  D = null;
  B += "&#160;";
  var A = Math.min(this.growMax, Math.max(this.metrics.getWidth(B) + 10, this.growMin));
  this.el.setWidth(A);
  this.fireEvent("autosize", this, A)
}});
Ext.form.TriggerField = function(A)
{
  this.mimicing = false;
  Ext.form.TriggerField.superclass.constructor.call(this, A)
};
Ext.extend(Ext.form.TriggerField, Ext.form.TextField, {defaultAutoCreate:{tag:"input",type:"text",size:"16",autocomplete:"off"},hideTrigger:false,autoSize:Ext.emptyFn,monitorTab:true,deferHeight:true,onResize:function(A, B)
{
  Ext.form.TriggerField.superclass.onResize.apply(this, arguments);
  if (typeof A == "number")
  {
    this.el.setWidth(this.adjustWidth("input", A - this.trigger.getWidth()))
  }
},adjustSize:Ext.BoxComponent.prototype.adjustSize,getResizeEl:function()
{
  return this.wrap
},getPositionEl:function()
{
  return this.wrap
},alignErrorIcon:function()
{
  this.errorIcon.alignTo(this.wrap, "tl-tr", [2,0])
},onRender:function(B, A)
{
  Ext.form.TriggerField.superclass.onRender.call(this, B, A);
  this.wrap = this.el.wrap({cls:"x-form-field-wrap"});
  this.trigger = this.wrap.createChild(this.triggerConfig || {tag:"img",src:Ext.BLANK_IMAGE_URL,cls:"x-form-trigger " + this.triggerClass});
  if (this.hideTrigger)
  {
    this.trigger.setDisplayed(false)
  }
  this.initTrigger();
  if (!this.width)
  {
    this.wrap.setWidth(this.el.getWidth() + this.trigger.getWidth())
  }
},initTrigger:function()
{
  this.trigger.on("click", this.onTriggerClick, this, {preventDefault:true});
  this.trigger.addClassOnOver("x-form-trigger-over");
  this.trigger.addClassOnClick("x-form-trigger-click")
},onDestroy:function()
{
  if (this.trigger)
  {
    this.trigger.removeAllListeners();
    this.trigger.remove()
  }
  if (this.wrap)
  {
    this.wrap.remove()
  }
  Ext.form.TriggerField.superclass.onDestroy.call(this)
},onFocus:function()
{
  Ext.form.TriggerField.superclass.onFocus.call(this);
  if (!this.mimicing)
  {
    this.wrap.addClass("x-trigger-wrap-focus");
    this.mimicing = true;
    Ext.get(Ext.isIE ? document.body : document).on("mousedown", this.mimicBlur, this);
    if (this.monitorTab)
    {
      this.el.on("keydown", this.checkTab, this)
    }
  }
},checkTab:function(A)
{
  if (A.getKey() == A.TAB)
  {
    this.triggerBlur()
  }
},onBlur:function()
{
},mimicBlur:function(B, A)
{
  if (!this.wrap.contains(A) && this.validateBlur())
  {
    this.triggerBlur()
  }
},triggerBlur:function()
{
  this.mimicing = false;
  Ext.get(Ext.isIE ? document.body : document).un("mousedown", this.mimicBlur);
  if (this.monitorTab)
  {
    this.el.un("keydown", this.checkTab, this)
  }
  this.wrap.removeClass("x-trigger-wrap-focus");
  Ext.form.TriggerField.superclass.onBlur.call(this)
},validateBlur:function(B, A)
{
  return true
},onDisable:function()
{
  Ext.form.TriggerField.superclass.onDisable.call(this);
  if (this.wrap)
  {
    this.wrap.addClass("x-item-disabled")
  }
},onEnable:function()
{
  Ext.form.TriggerField.superclass.onEnable.call(this);
  if (this.wrap)
  {
    this.wrap.removeClass("x-item-disabled")
  }
},onShow:function()
{
  if (this.wrap)
  {
    this.wrap.dom.style.display = "";
    this.wrap.dom.style.visibility = "visible"
  }
},onHide:function()
{
  this.wrap.dom.style.display = "none"
},onTriggerClick:Ext.emptyFn});
Ext.form.TwinTriggerField = Ext.extend(Ext.form.TriggerField, {initComponent:function()
{
  Ext.form.TwinTriggerField.superclass.initComponent.call(this);
  this.triggerConfig = {tag:"span",cls:"x-form-twin-triggers",cn:[{tag:"img",src:Ext.BLANK_IMAGE_URL,cls:"x-form-trigger " + this.trigger1Class},{tag:"img",src:Ext.BLANK_IMAGE_URL,cls:"x-form-trigger " + this.trigger2Class}]}
},getTrigger:function(A)
{
  return this.triggers[A]
},initTrigger:function()
{
  var A = this.trigger.select(".x-form-trigger", true);
  this.wrap.setStyle("overflow", "hidden");
  var B = this;
  A.each(function(D, F, C)
  {
    D.hide = function()
    {
      var G = B.wrap.getWidth();
      this.dom.style.display = "none";
      B.el.setWidth(G - B.trigger.getWidth())
    };
    D.show = function()
    {
      var G = B.wrap.getWidth();
      this.dom.style.display = "";
      B.el.setWidth(G - B.trigger.getWidth())
    };
    var E = "Trigger" + (C + 1);
    if (this["hide" + E])
    {
      D.dom.style.display = "none"
    }
    D.on("click", this["on" + E + "Click"], this, {preventDefault:true});
    D.addClassOnOver("x-form-trigger-over");
    D.addClassOnClick("x-form-trigger-click")
  }, this);
  this.triggers = A.elements
},onTrigger1Click:Ext.emptyFn,onTrigger2Click:Ext.emptyFn});
Ext.form.TextArea = function(A)
{
  Ext.form.TextArea.superclass.constructor.call(this, A);
  if (this.minHeight !== undefined)
  {
    this.growMin = this.minHeight
  }
  if (this.maxHeight !== undefined)
  {
    this.growMax = this.maxHeight
  }
};
Ext.extend(Ext.form.TextArea, Ext.form.TextField, {growMin:60,growMax:1000,preventScrollbars:false,onRender:function(B, A)
{
  if (!this.el)
  {
    this.defaultAutoCreate = {tag:"textarea",style:"width:300px;height:60px;",autocomplete:"off"}
  }
  Ext.form.TextArea.superclass.onRender.call(this, B, A);
  if (this.grow)
  {
    this.textSizeEl = Ext.DomHelper.append(document.body, {tag:"pre",cls:"x-form-grow-sizer"});
    if (this.preventScrollbars)
    {
      this.el.setStyle("overflow", "hidden")
    }
    this.el.setHeight(this.growMin)
  }
},onDestroy:function()
{
  if (this.textSizeEl)
  {
    this.textSizeEl.parentNode.removeChild(this.textSizeEl)
  }
  Ext.form.TextArea.superclass.onDestroy.call(this)
},onKeyUp:function(A)
{
  if (!A.isNavKeyPress() || A.getKey() == A.ENTER)
  {
    this.autoSize()
  }
},autoSize:function()
{
  if (!this.grow || !this.textSizeEl)
  {
    return
  }
  var C = this.el;
  var A = C.dom.value;
  var D = this.textSizeEl;
  D.innerHTML = "";
  D.appendChild(document.createTextNode(A));
  A = D.innerHTML;
  Ext.fly(D).setWidth(this.el.getWidth());
  if (A.length < 1)
  {
    A = "&#160;&#160;"
  } else
  {
    if (Ext.isIE)
    {
      A = A.replace(/\n/g, "<p>&#160;</p>")
    }
    A += "&#160;\n&#160;"
  }
  D.innerHTML = A;
  var B = Math.min(this.growMax, Math.max(D.offsetHeight, this.growMin));
  if (B != this.lastHeight)
  {
    this.lastHeight = B;
    this.el.setHeight(B);
    this.fireEvent("autosize", this, B)
  }
}});
Ext.form.NumberField = function(A)
{
  Ext.form.NumberField.superclass.constructor.call(this, A)
};
Ext.extend(Ext.form.NumberField, Ext.form.TextField, {fieldClass:"x-form-field x-form-num-field",allowDecimals:true,decimalSeparator:".",decimalPrecision:2,allowNegative:true,minValue:Number.NEGATIVE_INFINITY,maxValue:Number.MAX_VALUE,minText:"The minimum value for this field is {0}",maxText:"The maximum value for this field is {0}",nanText:"{0} is not a valid number",initEvents:function()
{
  Ext.form.NumberField.superclass.initEvents.call(this);
  var B = "0123456789";
  if (this.allowDecimals)
  {
    B += this.decimalSeparator
  }
  if (this.allowNegative)
  {
    B += "-"
  }
  this.stripCharsRe = new RegExp("[^" + B + "]", "gi");
  var A = function(D)
  {
    var C = D.getKey();
    if (!Ext.isIE && (D.isSpecialKey() || C == D.BACKSPACE || C == D.DELETE))
    {
      return
    }
    var E = D.getCharCode();
    if (B.indexOf(String.fromCharCode(E)) === -1)
    {
      D.stopEvent()
    }
  };
  this.el.on("keypress", A, this)
},validateValue:function(B)
{
  if (!Ext.form.NumberField.superclass.validateValue.call(this, B))
  {
    return false
  }
  if (B.length < 1)
  {
    return true
  }
  var A = this.parseValue(B);
  if (isNaN(A))
  {
    this.markInvalid(String.format(this.nanText, B));
    return false
  }
  if (A < this.minValue)
  {
    this.markInvalid(String.format(this.minText, this.minValue));
    return false
  }
  if (A > this.maxValue)
  {
    this.markInvalid(String.format(this.maxText, this.maxValue));
    return false
  }
  return true
},getValue:function()
{
  return this.fixPrecision(this.parseValue(Ext.form.NumberField.superclass.getValue.call(this)))
},parseValue:function(A)
{
  A = parseFloat(String(A).replace(this.decimalSeparator, "."));
  return isNaN(A) ? "" : A
},fixPrecision:function(B)
{
  var A = isNaN(B);
  if (!this.allowDecimals || this.decimalPrecision == -1 || A || !B)
  {
    return A ? "" : B
  }
  return parseFloat(B).toFixed(this.decimalPrecision)
},setValue:function(A)
{
  Ext.form.NumberField.superclass.setValue.call(this, String(A).replace(".", this.decimalSeparator))
},decimalPrecisionFcn:function(A)
{
  return Math.floor(A)
},beforeBlur:function()
{
  var A = this.parseValue(this.getRawValue());
  if (A)
  {
    this.setValue(this.fixPrecision(A))
  }
}});
Ext.form.DateField = function(B)
{
  Ext.form.DateField.superclass.constructor.call(this, B);
  if (typeof this.minValue == "string")
  {
    this.minValue = this.parseDate(this.minValue)
  }
  if (typeof this.maxValue == "string")
  {
    this.maxValue = this.parseDate(this.maxValue)
  }
  this.ddMatch = null;
  if (this.disabledDates)
  {
    var A = this.disabledDates;
    var D = "(?:";
    for (var C = 0; C < A.length; C++)
    {
      D += A[C];
      if (C != A.length - 1)
      {
        D += "|"
      }
    }
    this.ddMatch = new RegExp(D + ")")
  }
};
Ext.extend(Ext.form.DateField, Ext.form.TriggerField, {format:"m/d/y",altFormats:"m/d/Y|m-d-y|m-d-Y|m/d|m-d|md|mdy|mdY|d",disabledDays:null,disabledDaysText:"Disabled",disabledDates:null,disabledDatesText:"Disabled",minValue:null,maxValue:null,minText:"The date in this field must be equal to or after {0}",maxText:"The date in this field must be equal to or before {0}",invalidText:"{0} is not a valid date - it must be in the format {1}",triggerClass:"x-form-date-trigger",defaultAutoCreate:{tag:"input",type:"text",size:"10",autocomplete:"off"},validateValue:function(E)
{
  E = this.formatDate(E);
  if (!Ext.form.DateField.superclass.validateValue.call(this, E))
  {
    return false
  }
  if (E.length < 1)
  {
    return true
  }
  var C = E;
  E = this.parseDate(E);
  if (!E)
  {
    this.markInvalid(String.format(this.invalidText, C, this.format));
    return false
  }
  var F = E.getTime();
  if (this.minValue && F < this.minValue.getTime())
  {
    this.markInvalid(String.format(this.minText, this.formatDate(this.minValue)));
    return false
  }
  if (this.maxValue && F > this.maxValue.getTime())
  {
    this.markInvalid(String.format(this.maxText, this.formatDate(this.maxValue)));
    return false
  }
  if (this.disabledDays)
  {
    var A = E.getDay();
    for (var B = 0; B < this.disabledDays.length; B++)
    {
      if (A === this.disabledDays[B])
      {
        this.markInvalid(this.disabledDaysText);
        return false
      }
    }
  }
  var D = this.formatDate(E);
  if (this.ddMatch && this.ddMatch.test(D))
  {
    this.markInvalid(String.format(this.disabledDatesText, D));
    return false
  }
  return true
},validateBlur:function()
{
  return !this.menu || !this.menu.isVisible()
},getValue:function()
{
  return this.parseDate(Ext.form.DateField.superclass.getValue.call(this)) || ""
},setValue:function(A)
{
  Ext.form.DateField.superclass.setValue.call(this, this.formatDate(this.parseDate(A)))
},parseDate:function(D)
{
  if (!D || D instanceof Date)
  {
    return D
  }
  var B = Date.parseDate(D, this.format);
  if (!B && this.altFormats)
  {
    if (!this.altFormatsArray)
    {
      this.altFormatsArray = this.altFormats.split("|")
    }
    for (var C = 0,A = this.altFormatsArray.length; C < A && !B; C++)
    {
      B = Date.parseDate(D, this.altFormatsArray[C])
    }
  }
  return B
},formatDate:function(A)
{
  return(!A || !(A instanceof Date)) ? A : A.dateFormat(this.format)
},menuListeners:{select:function(A, B)
{
  this.setValue(B)
},show:function()
{
  this.onFocus()
},hide:function()
{
  this.focus.defer(10, this);
  var A = this.menuListeners;
  this.menu.un("select", A.select, this);
  this.menu.un("show", A.show, this);
  this.menu.un("hide", A.hide, this)
}},onTriggerClick:function()
{
  if (this.disabled)
  {
    return
  }
  if (this.menu == null)
  {
    this.menu = new Ext.menu.DateMenu()
  }
  Ext.apply(this.menu.picker, {minDate:this.minValue,maxDate:this.maxValue,disabledDatesRE:this.ddMatch,disabledDatesText:this.disabledDatesText,disabledDays:this.disabledDays,disabledDaysText:this.disabledDaysText,format:this.format,minText:String.format(this.minText, this.formatDate(this.minValue)),maxText:String.format(this.maxText, this.formatDate(this.maxValue))});
  this.menu.on(Ext.apply({}, this.menuListeners, {scope:this}));
  this.menu.picker.setValue(this.getValue() || new Date());
  this.menu.show(this.el, "tl-bl?")
},beforeBlur:function()
{
  var A = this.parseDate(this.getRawValue());
  if (A)
  {
    this.setValue(A)
  }
}});
Ext.form.ComboBox = function(B)
{
  Ext.form.ComboBox.superclass.constructor.call(this, B);
  this.addEvents({"expand":true,"collapse":true,"beforeselect":true,"select":true,"beforequery":true});
  if (this.transform)
  {
    this.allowDomMove = false;
    var D = Ext.getDom(this.transform);
    if (!this.hiddenName)
    {
      this.hiddenName = D.name
    }
    if (!this.store)
    {
      this.mode = "local";
      var H = [],E = D.options;
      for (var C = 0,A = E.length; C < A; C++)
      {
        var G = E[C];
        var F = (Ext.isIE ? G.getAttributeNode("value").specified : G.hasAttribute("value")) ? G.value : G.text;
        if (G.selected)
        {
          this.value = F
        }
        H.push([F,G.text])
      }
      this.store = new Ext.data.SimpleStore({"id":0,fields:["value","text"],data:H});
      this.valueField = "value";
      this.displayField = "text"
    }
    D.name = Ext.id();
    if (!this.lazyRender)
    {
      this.target = true;
      this.el = Ext.DomHelper.insertBefore(D, this.autoCreate || this.defaultAutoCreate);
      D.parentNode.removeChild(D);
      this.render(this.el.parentNode)
    } else
    {
      D.parentNode.removeChild(D)
    }
  }
  this.selectedIndex = -1;
  if (this.mode == "local")
  {
    if (B.queryDelay === undefined)
    {
      this.queryDelay = 10
    }
    if (B.minChars === undefined)
    {
      this.minChars = 0
    }
  }
};
Ext.extend(Ext.form.ComboBox, Ext.form.TriggerField, {defaultAutoCreate:{tag:"input",type:"text",size:"24",autocomplete:"off"},listWidth:undefined,displayField:undefined,valueField:undefined,hiddenName:undefined,listClass:"",selectedClass:"x-combo-selected",triggerClass:"x-form-arrow-trigger",shadow:"sides",listAlign:"tl-bl?",maxHeight:300,triggerAction:"query",minChars:4,typeAhead:false,queryDelay:500,pageSize:0,selectOnFocus:false,queryParam:"query",loadingText:"Loading...",resizable:false,handleHeight:8,editable:true,allQuery:"",mode:"remote",minListWidth:70,forceSelection:false,typeAheadDelay:250,valueNotFoundText:undefined,onRender:function(C, A)
{
  Ext.form.ComboBox.superclass.onRender.call(this, C, A);
  if (this.hiddenName)
  {
    this.hiddenField = this.el.insertSibling({tag:"input",type:"hidden",name:this.hiddenName,id:(this.hiddenId || this.hiddenName)}, "before", true);
    this.hiddenField.value = this.hiddenValue !== undefined ? this.hiddenValue : this.value !== undefined ? this.value : "";
    this.el.dom.removeAttribute("name")
  }
  if (Ext.isGecko)
  {
    this.el.dom.setAttribute("autocomplete", "off")
  }
  var B = "x-combo-list";
  this.list = new Ext.Layer({shadow:this.shadow,cls:[B,this.listClass].join(" "),constrain:false});
  var D = this.listWidth || Math.max(this.wrap.getWidth(), this.minListWidth);
  this.list.setWidth(D);
  this.list.swallowEvent("mousewheel");
  this.assetHeight = 0;
  if (this.title)
  {
    this.header = this.list.createChild({cls:B + "-hd",html:this.title});
    this.assetHeight += this.header.getHeight()
  }
  this.innerList = this.list.createChild({cls:B + "-inner"});
  this.innerList.on("mouseover", this.onViewOver, this);
  this.innerList.on("mousemove", this.onViewMove, this);
  this.innerList.setWidth(D - this.list.getFrameWidth("lr"));
  if (this.pageSize)
  {
    this.footer = this.list.createChild({cls:B + "-ft"});
    this.pageTb = new Ext.PagingToolbar(this.footer, this.store, {pageSize:this.pageSize});
    this.assetHeight += this.footer.getHeight()
  }
  if (!this.tpl)
  {
    this.tpl = "<div class=\"" + B + "-item\">{" + this.displayField + "}</div>"
  }
  this.view = new Ext.View(this.innerList, this.tpl, {singleSelect:true,store:this.store,selectedClass:this.selectedClass});
  this.view.on("click", this.onViewClick, this);
  this.store.on("beforeload", this.onBeforeLoad, this);
  this.store.on("load", this.onLoad, this);
  this.store.on("loadexception", this.collapse, this);
  if (this.resizable)
  {
    this.resizer = new Ext.Resizable(this.list, {pinned:true,handles:"se"});
    this.resizer.on("resize", function(G, E, F)
    {
      this.maxHeight = F - this.handleHeight - this.list.getFrameWidth("tb") - this.assetHeight;
      this.listWidth = E;
      this.innerList.setWidth(E - this.list.getFrameWidth("lr"));
      this.restrictHeight()
    }, this);
    this[this.pageSize ? "footer" : "innerList"].setStyle("margin-bottom", this.handleHeight + "px")
  }
  if (!this.editable)
  {
    this.editable = true;
    this.setEditable(false)
  }
},initEvents:function()
{
  Ext.form.ComboBox.superclass.initEvents.call(this);
  this.keyNav = new Ext.KeyNav(this.el, {"up":function(A)
  {
    this.inKeyMode = true;
    this.selectPrev()
  },"down":function(A)
  {
    if (!this.isExpanded())
    {
      this.onTriggerClick()
    } else
    {
      this.inKeyMode = true;
      this.selectNext()
    }
  },"enter":function(A)
  {
    this.onViewClick()
  },"esc":function(A)
  {
    this.collapse()
  },"tab":function(A)
  {
    this.onViewClick(false);
    return true
  },scope:this,doRelay:function(C, B, A)
  {
    if (A == "down" || this.scope.isExpanded())
    {
      return Ext.KeyNav.prototype.doRelay.apply(this, arguments)
    }
    return true
  },forceKeyDown:true});
  this.queryDelay = Math.max(this.queryDelay || 10, this.mode == "local" ? 10 : 250);
  this.dqTask = new Ext.util.DelayedTask(this.initQuery, this);
  if (this.typeAhead)
  {
    this.taTask = new Ext.util.DelayedTask(this.onTypeAhead, this)
  }
  if (this.editable !== false)
  {
    this.el.on("keyup", this.onKeyUp, this)
  }
  if (this.forceSelection)
  {
    this.on("blur", this.doForce, this)
  }
},onDestroy:function()
{
  if (this.view)
  {
    this.view.setStore(null);
    this.view.el.removeAllListeners();
    this.view.el.remove();
    this.view.purgeListeners()
  }
  if (this.list)
  {
    this.list.destroy()
  }
  if (this.store)
  {
    this.store.un("beforeload", this.onBeforeLoad, this);
    this.store.un("load", this.onLoad, this);
    this.store.un("loadexception", this.collapse, this)
  }
  Ext.form.ComboBox.superclass.onDestroy.call(this)
},fireKey:function(A)
{
  if (A.isNavKeyPress() && !this.list.isVisible())
  {
    this.fireEvent("specialkey", this, A)
  }
},onResize:function(A, B)
{
  Ext.form.ComboBox.superclass.onResize.apply(this, arguments);
  if (this.list && this.listWidth === undefined)
  {
    var C = Math.max(A, this.minListWidth);
    this.list.setWidth(C);
    this.innerList.setWidth(C - this.list.getFrameWidth("lr"))
  }
},setEditable:function(A)
{
  if (A == this.editable)
  {
    return
  }
  this.editable = A;
  if (!A)
  {
    this.el.dom.setAttribute("readOnly", true);
    this.el.on("mousedown", this.onTriggerClick, this);
    this.el.addClass("x-combo-noedit")
  } else
  {
    this.el.dom.setAttribute("readOnly", false);
    this.el.un("mousedown", this.onTriggerClick, this);
    this.el.removeClass("x-combo-noedit")
  }
},onBeforeLoad:function()
{
  if (!this.hasFocus)
  {
    return
  }
  this.innerList.update(this.loadingText ? "<div class=\"loading-indicator\">" + this.loadingText + "</div>" : "");
  this.restrictHeight();
  this.selectedIndex = -1
},onLoad:function()
{
  if (!this.hasFocus)
  {
    return
  }
  if (this.store.getCount() > 0)
  {
    this.expand();
    this.restrictHeight();
    if (this.lastQuery == this.allQuery)
    {
      if (this.editable)
      {
        this.el.dom.select()
      }
      if (!this.selectByValue(this.value, true))
      {
        this.select(0, true)
      }
    } else
    {
      this.selectNext();
      if (this.typeAhead && this.lastKey != Ext.EventObject.BACKSPACE && this.lastKey != Ext.EventObject.DELETE)
      {
        this.taTask.delay(this.typeAheadDelay)
      }
    }
  } else
  {
    this.onEmptyResults()
  }
},onTypeAhead:function()
{
  if (this.store.getCount() > 0)
  {
    var B = this.store.getAt(0);
    var C = B.data[this.displayField];
    var A = C.length;
    var D = this.getRawValue().length;
    if (D != A)
    {
      this.setRawValue(C);
      this.selectText(D, C.length)
    }
  }
},onSelect:function(A, B)
{
  if (this.fireEvent("beforeselect", this, A, B) !== false)
  {
    this.setValue(A.data[this.valueField || this.displayField]);
    this.collapse();
    this.fireEvent("select", this, A, B)
  }
},getValue:function()
{
  if (this.valueField)
  {
    return typeof this.value != "undefined" ? this.value : ""
  } else
  {
    return Ext.form.ComboBox.superclass.getValue.call(this)
  }
},clearValue:function()
{
  if (this.hiddenField)
  {
    this.hiddenField.value = ""
  }
  this.setRawValue("");
  this.lastSelectionText = "";
  this.applyEmptyText()
},setValue:function(A)
{
  var C = A;
  if (this.valueField)
  {
    var B = this.findRecord(this.valueField, A);
    if (B)
    {
      C = B.data[this.displayField]
    } else
    {
      if (this.valueNotFoundText !== undefined)
      {
        C = this.valueNotFoundText
      }
    }
  }
  this.lastSelectionText = C;
  if (this.hiddenField)
  {
    this.hiddenField.value = A
  }
  Ext.form.ComboBox.superclass.setValue.call(this, C);
  this.value = A
},findRecord:function(C, B)
{
  var A;
  if (this.store.getCount() > 0)
  {
    this.store.each(function(D)
    {
      if (D.data[C] == B)
      {
        A = D;
        return false
      }
    })
  }
  return A
},onViewMove:function(B, A)
{
  this.inKeyMode = false
},onViewOver:function(D, B)
{
  if (this.inKeyMode)
  {
    return
  }
  var C = this.view.findItemFromChild(B);
  if (C)
  {
    var A = this.view.indexOf(C);
    this.select(A, false)
  }
},onViewClick:function(B)
{
  var A = this.view.getSelectedIndexes()[0];
  var C = this.store.getAt(A);
  if (C)
  {
    this.onSelect(C, A)
  }
  if (B !== false)
  {
    this.el.focus()
  }
},restrictHeight:function()
{
  this.innerList.dom.style.height = "";
  var A = this.innerList.dom;
  var B = Math.max(A.clientHeight, A.offsetHeight, A.scrollHeight);
  this.innerList.setHeight(B < this.maxHeight ? "auto" : this.maxHeight);
  this.list.beginUpdate();
  this.list.setHeight(this.innerList.getHeight() + this.list.getFrameWidth("tb") + (this.resizable ? this.handleHeight : 0) + this.assetHeight);
  this.list.alignTo(this.el, this.listAlign);
  this.list.endUpdate()
},onEmptyResults:function()
{
  this.collapse()
},isExpanded:function()
{
  return this.list.isVisible()
},selectByValue:function(A, C)
{
  if (A !== undefined && A !== null)
  {
    var B = this.findRecord(this.valueField || this.displayField, A);
    if (B)
    {
      this.select(this.store.indexOf(B), C);
      return true
    }
  }
  return false
},select:function(A, C)
{
  this.selectedIndex = A;
  this.view.select(A);
  if (C !== false)
  {
    var B = this.view.getNode(A);
    if (B)
    {
      this.innerList.scrollChildIntoView(B, false)
    }
  }
},selectNext:function()
{
  var A = this.store.getCount();
  if (A > 0)
  {
    if (this.selectedIndex == -1)
    {
      this.select(0)
    } else
    {
      if (this.selectedIndex < A - 1)
      {
        this.select(this.selectedIndex + 1)
      }
    }
  }
},selectPrev:function()
{
  var A = this.store.getCount();
  if (A > 0)
  {
    if (this.selectedIndex == -1)
    {
      this.select(0)
    } else
    {
      if (this.selectedIndex != 0)
      {
        this.select(this.selectedIndex - 1)
      }
    }
  }
},onKeyUp:function(A)
{
  if (this.editable !== false && !A.isSpecialKey())
  {
    this.lastKey = A.getKey();
    this.dqTask.delay(this.queryDelay)
  }
},validateBlur:function()
{
  return !this.list || !this.list.isVisible()
},initQuery:function()
{
  this.doQuery(this.getRawValue())
},doForce:function()
{
  if (this.el.dom.value.length > 0)
  {
    this.el.dom.value = this.lastSelectionText === undefined ? "" : this.lastSelectionText;
    this.applyEmptyText()
  }
},doQuery:function(C, B)
{
  if (C === undefined || C === null)
  {
    C = ""
  }
  var A = {query:C,forceAll:B,combo:this,cancel:false};
  if (this.fireEvent("beforequery", A) === false || A.cancel)
  {
    return false
  }
  C = A.query;
  B = A.forceAll;
  if (B === true || (C.length >= this.minChars))
  {
    if (this.lastQuery != C)
    {
      this.lastQuery = C;
      if (this.mode == "local")
      {
        this.selectedIndex = -1;
        if (B)
        {
          this.store.clearFilter()
        } else
        {
          this.store.filter(this.displayField, C)
        }
        this.onLoad()
      } else
      {
        this.store.baseParams[this.queryParam] = C;
        this.store.load({params:this.getParams(C)});
        this.expand()
      }
    } else
    {
      this.selectedIndex = -1;
      this.onLoad()
    }
  }
},getParams:function(A)
{
  var B = {};
  if (this.pageSize)
  {
    B.start = 0;
    B.limit = this.pageSize
  }
  return B
},collapse:function()
{
  if (!this.isExpanded())
  {
    return
  }
  this.list.hide();
  Ext.get(document).un("mousedown", this.collapseIf, this);
  Ext.get(document).un("mousewheel", this.collapseIf, this);
  this.fireEvent("collapse", this)
},collapseIf:function(A)
{
  if (!A.within(this.wrap) && !A.within(this.list))
  {
    this.collapse()
  }
},expand:function()
{
  if (this.isExpanded() || !this.hasFocus)
  {
    return
  }
  this.list.alignTo(this.el, this.listAlign);
  this.list.show();
  Ext.get(document).on("mousedown", this.collapseIf, this);
  Ext.get(document).on("mousewheel", this.collapseIf, this);
  this.fireEvent("expand", this)
},onTriggerClick:function()
{
  if (this.disabled)
  {
    return
  }
  if (this.isExpanded())
  {
    this.collapse();
    this.el.focus()
  } else
  {
    this.hasFocus = true;
    if (this.triggerAction == "all")
    {
      this.doQuery(this.allQuery, true)
    } else
    {
      this.doQuery(this.getRawValue())
    }
    this.el.focus()
  }
}});
Ext.form.Checkbox = function(A)
{
  Ext.form.Checkbox.superclass.constructor.call(this, A);
  this.addEvents({check:true})
};
Ext.extend(Ext.form.Checkbox, Ext.form.Field, {focusClass:undefined,fieldClass:"x-form-field",checked:false,defaultAutoCreate:{tag:"input",type:"checkbox",autocomplete:"off"},boxLabel:undefined,onResize:function()
{
  Ext.form.Checkbox.superclass.onResize.apply(this, arguments);
  if (!this.boxLabel)
  {
    this.el.alignTo(this.wrap, "c-c")
  }
},initEvents:function()
{
  Ext.form.Checkbox.superclass.initEvents.call(this);
  this.el.on("click", this.onClick, this);
  this.el.on("change", this.onClick, this)
},getResizeEl:function()
{
  return this.wrap
},getPositionEl:function()
{
  return this.wrap
},onRender:function(B, A)
{
  Ext.form.Checkbox.superclass.onRender.call(this, B, A);
  if (this.inputValue !== undefined)
  {
    this.el.dom.value = this.inputValue
  }
  this.wrap = this.el.wrap({cls:"x-form-check-wrap"});
  if (this.boxLabel)
  {
    this.wrap.createChild({tag:"label",htmlFor:this.el.id,cls:"x-form-cb-label",html:this.boxLabel})
  }
  if (this.checked)
  {
    this.setValue(true)
  } else
  {
    this.checked = this.el.dom.checked
  }
},initValue:Ext.emptyFn,getValue:function()
{
  if (this.rendered)
  {
    return this.el.dom.checked
  }
  return false
},onClick:function()
{
  if (this.el.dom.checked != this.checked)
  {
    this.setValue(this.el.dom.checked)
  }
},setValue:function(A)
{
  this.checked = (A === true || A === "true" || A == "1" || String(A).toLowerCase() == "on");
  if (this.el && this.el.dom)
  {
    this.el.dom.checked = this.checked;
    this.el.dom.defaultChecked = this.checked
  }
  this.fireEvent("check", this, this.checked)
}});
Ext.form.Radio = function()
{
  Ext.form.Radio.superclass.constructor.apply(this, arguments)
};
Ext.extend(Ext.form.Radio, Ext.form.Checkbox, {inputType:"radio",getGroupValue:function()
{
  return this.el.up("form").child("input[name=" + this.el.dom.name + "]:checked", true).value
}});
Ext.form.HtmlEditor = Ext.extend(Ext.form.Field, {enableFormat:true,enableFontSize:true,enableColors:true,enableAlignments:true,enableLists:true,enableSourceEdit:true,enableLinks:true,enableFont:true,createLinkText:"Please enter the URL for the link:",defaultLinkValue:"http:/" + "/",fontFamilies:["Arial","Courier New","Tahoma","Times New Roman","Verdana"],defaultFont:"tahoma",validationEvent:false,deferHeight:true,initialized:false,activated:false,sourceEditMode:false,onFocus:Ext.emptyFn,iframePad:3,hideMode:"offsets",defaultAutoCreate:{tag:"textarea",style:"width:500px;height:300px;",autocomplete:"off"},initComponent:function()
{
  this.addEvents({initialize:true,activate:true,beforesync:true,beforepush:true,sync:true,push:true,editmodechange:true})
},createFontOptions:function()
{
  var D = [],B = this.fontFamilies,C,F;
  for (var E = 0,A = B.length; E < A; E++)
  {
    C = B[E];
    F = C.toLowerCase();
    D.push("<option value=\"", F, "\" style=\"font-family:", C, ";\"", (this.defaultFont == F ? " selected=\"true\">" : ">"), C, "</option>")
  }
  return D.join("")
},createToolbar:function(C)
{
  function B(F, D, E)
  {
    return{id:F,cls:"x-btn-icon x-edit-" + F,enableToggle:D !== false,scope:C,handler:E || C.relayBtnCmd,clickEvent:"mousedown",tooltip:C.buttonTips[F] || undefined,tabIndex:-1}
  }
  var A = new Ext.Toolbar(this.wrap.dom.firstChild);
  A.el.on("click", function(D)
  {
    D.preventDefault()
  });
  if (this.enableFont && !Ext.isSafari)
  {
    this.fontSelect = A.el.createChild({tag:"select",tabIndex:-1,cls:"x-font-select",html:this.createFontOptions()});
    this.fontSelect.on("change", function()
    {
      var D = this.fontSelect.dom.value;
      this.relayCmd("fontname", D);
      this.deferFocus()
    }, this);
    A.add(this.fontSelect.dom, "-")
  }
  if (this.enableFormat)
  {
    A.add(B("bold"), B("italic"), B("underline"))
  }
  if (this.enableFontSize)
  {
    A.add("-", B("increasefontsize", false, this.adjustFont), B("decreasefontsize", false, this.adjustFont))
  }
  if (this.enableColors)
  {
    A.add("-", {id:"forecolor",cls:"x-btn-icon x-edit-forecolor",clickEvent:"mousedown",tooltip:C.buttonTips["forecolor"] || undefined,tabIndex:-1,menu:new Ext.menu.ColorMenu({allowReselect:true,focus:Ext.emptyFn,value:"000000",plain:true,selectHandler:function(E, D)
    {
      this.execCmd("forecolor", Ext.isSafari || Ext.isIE ? "#" + D : D);
      this.deferFocus()
    },scope:this,clickEvent:"mousedown"})}, {id:"backcolor",cls:"x-btn-icon x-edit-backcolor",clickEvent:"mousedown",tooltip:C.buttonTips["backcolor"] || undefined,tabIndex:-1,menu:new Ext.menu.ColorMenu({focus:Ext.emptyFn,value:"FFFFFF",plain:true,allowReselect:true,selectHandler:function(E, D)
    {
      if (Ext.isGecko)
      {
        this.execCmd("useCSS", false);
        this.execCmd("hilitecolor", D);
        this.execCmd("useCSS", true);
        this.deferFocus()
      } else
      {
        this.execCmd(Ext.isOpera ? "hilitecolor" : "backcolor", Ext.isSafari || Ext.isIE ? "#" + D : D);
        this.deferFocus()
      }
    },scope:this,clickEvent:"mousedown"})})
  }
  if (this.enableAlignments)
  {
    A.add("-", B("justifyleft"), B("justifycenter"), B("justifyright"))
  }
  if (!Ext.isSafari)
  {
    if (this.enableLinks)
    {
      A.add("-", B("createlink", false, this.createLink))
    }
    if (this.enableLists)
    {
      A.add("-", B("insertorderedlist"), B("insertunorderedlist"))
    }
    if (this.enableSourceEdit)
    {
      A.add("-", B("sourceedit", true, function(D)
      {
        this.toggleSourceEdit(D.pressed)
      }))
    }
  }
  this.tb = A
},getDocMarkup:function()
{
  return"<html><head><style type=\"text/css\">body{border:0;margin:0;padding:3px;height:98%;cursor:text;}</style></head><body></body></html>"
},onRender:function(C, A)
{
  Ext.form.HtmlEditor.superclass.onRender.call(this, C, A);
  this.el.dom.style.border = "0 none";
  this.el.dom.setAttribute("tabIndex", -1);
  this.el.addClass("x-hidden");
  if (Ext.isIE)
  {
    this.el.applyStyles("margin-top:-1px;margin-bottom:-1px;")
  }
  this.wrap = this.el.wrap({cls:"x-html-editor-wrap",cn:{cls:"x-html-editor-tb"}});
  this.createToolbar(this);
  this.tb.items.each(function(E)
  {
    if (E.id != "sourceedit")
    {
      E.disable()
    }
  });
  var D = document.createElement("iframe");
  D.name = Ext.id();
  D.frameBorder = "no";
  D.src = (Ext.SSL_SECURE_URL || "javascript:false");
  this.wrap.dom.appendChild(D);
  this.iframe = D;
  if (Ext.isIE)
  {
    this.doc = D.contentWindow.document;
    this.win = D.contentWindow
  } else
  {
    this.doc = (D.contentDocument || window.frames[D.name].document);
    this.win = window.frames[D.name]
  }
  this.doc.designMode = "on";
  this.doc.open();
  this.doc.write(this.getDocMarkup());
  this.doc.close();
  var B = {run:function()
  {
    if (this.doc.body || this.doc.readyState == "complete")
    {
      this.doc.designMode = "on";
      Ext.TaskMgr.stop(B);
      this.initEditor.defer(10, this)
    }
  },interval:10,duration:10000,scope:this};
  Ext.TaskMgr.start(B);
  if (!this.width)
  {
    this.setSize(this.el.getSize())
  }
},onResize:function(B, C)
{
  Ext.form.HtmlEditor.superclass.onResize.apply(this, arguments);
  if (this.el && this.iframe)
  {
    if (typeof B == "number")
    {
      var D = B - this.wrap.getFrameWidth("lr");
      this.el.setWidth(this.adjustWidth("textarea", D));
      this.iframe.style.width = D + "px"
    }
    if (typeof C == "number")
    {
      var A = C - this.wrap.getFrameWidth("tb") - this.tb.el.getHeight();
      this.el.setHeight(this.adjustWidth("textarea", A));
      this.iframe.style.height = A + "px";
      if (this.doc)
      {
        (this.doc.body || this.doc.documentElement).style.height = (A - (this.iframePad * 2)) + "px"
      }
    }
  }
},toggleSourceEdit:function(A)
{
  if (A === undefined)
  {
    A = !this.sourceEditMode
  }
  this.sourceEditMode = A === true;
  var B = this.tb.items.get("sourceedit");
  if (B.pressed !== this.sourceEditMode)
  {
    B.toggle(this.sourceEditMode);
    return
  }
  if (this.sourceEditMode)
  {
    this.tb.items.each(function(C)
    {
      if (C.id != "sourceedit")
      {
        C.disable()
      }
    });
    this.syncValue();
    this.iframe.className = "x-hidden";
    this.el.removeClass("x-hidden");
    this.el.dom.removeAttribute("tabIndex");
    this.el.focus()
  } else
  {
    if (this.initialized)
    {
      this.tb.items.each(function(C)
      {
        C.enable()
      })
    }
    this.pushValue();
    this.iframe.className = "";
    this.el.addClass("x-hidden");
    this.el.dom.setAttribute("tabIndex", -1);
    this.deferFocus()
  }
  this.setSize(this.wrap.getSize());
  this.fireEvent("editmodechange", this, this.sourceEditMode)
},createLink:function()
{
  var A = prompt(this.createLinkText, this.defaultLinkValue);
  if (A && A != "http:/" + "/")
  {
    this.relayCmd("createlink", A)
  }
},adjustSize:Ext.BoxComponent.prototype.adjustSize,getResizeEl:function()
{
  return this.wrap
},getPositionEl:function()
{
  return this.wrap
},initEvents:function()
{
  this.originalValue = this.getValue()
},markInvalid:Ext.emptyFn,clearInvalid:Ext.emptyFn,setValue:function(A)
{
  Ext.form.HtmlEditor.superclass.setValue.call(this, A);
  this.pushValue()
},cleanHtml:function(A)
{
  A = String(A);
  if (A.length > 5)
  {
    if (Ext.isSafari)
    {
      A = A.replace(/\sclass="(?:Apple-style-span|khtml-block-placeholder)"/gi, "")
    }
  }
  if (A == "&nbsp;")
  {
    A = ""
  }
  return A
},syncValue:function()
{
  if (this.initialized)
  {
    var D = (this.doc.body || this.doc.documentElement);
    var C = D.innerHTML;
    if (Ext.isSafari)
    {
      var B = D.getAttribute("style");
      var A = B.match(/text-align:(.*?);/i);
      if (A && A[1])
      {
        C = "<div style=\"" + A[0] + "\">" + C + "</div>"
      }
    }
    C = this.cleanHtml(C);
    if (this.fireEvent("beforesync", this, C) !== false)
    {
      this.el.dom.value = C;
      this.fireEvent("sync", this, C)
    }
  }
},pushValue:function()
{
  if (this.initialized)
  {
    var A = this.el.dom.value;
    if (A.length < 1)
    {
      A = "&nbsp;"
    }
    if (this.fireEvent("beforepush", this, A) !== false)
    {
      (this.doc.body || this.doc.documentElement).innerHTML = A;
      this.fireEvent("push", this, A)
    }
  }
},deferFocus:function()
{
  this.focus.defer(10, this)
},focus:function()
{
  if (this.win && !this.sourceEditMode)
  {
    this.win.focus()
  } else
  {
    this.el.focus()
  }
},initEditor:function()
{
  var B = (this.doc.body || this.doc.documentElement);
  var A = this.el.getStyles("font-size", "font-family", "background-image", "background-repeat");
  A["background-attachment"] = "fixed";
  B.bgProperties = "fixed";
  Ext.DomHelper.applyStyles(B, A);
  Ext.EventManager.on(this.doc, {"mousedown":this.onEditorEvent,"dblclick":this.onEditorEvent,"click":this.onEditorEvent,"keyup":this.onEditorEvent,buffer:100,scope:this});
  if (Ext.isGecko)
  {
    Ext.EventManager.on(this.doc, "keypress", this.applyCommand, this)
  }
  if (Ext.isIE || Ext.isSafari || Ext.isOpera)
  {
    Ext.EventManager.on(this.doc, "keydown", this.fixKeys, this)
  }
  this.initialized = true;
  this.fireEvent("initialize", this);
  this.pushValue()
},onDestroy:function()
{
  if (this.rendered)
  {
    this.tb.items.each(function(A)
    {
      if (A.menu)
      {
        A.menu.removeAll();
        if (A.menu.el)
        {
          A.menu.el.destroy()
        }
      }
      A.destroy()
    });
    this.wrap.dom.innerHTML = "";
    this.wrap.remove()
  }
},onFirstFocus:function()
{
  this.activated = true;
  this.tb.items.each(function(D)
  {
    D.enable()
  });
  if (Ext.isGecko)
  {
    this.win.focus();
    var A = this.win.getSelection();
    if (!A.focusNode || A.focusNode.nodeType != 3)
    {
      var B = A.getRangeAt(0);
      B.selectNodeContents((this.doc.body || this.doc.documentElement));
      B.collapse(true);
      this.deferFocus()
    }
    try
    {
      this.execCmd("useCSS", true);
      this.execCmd("styleWithCSS", false)
    } catch(C)
    {
    }
  }
  this.fireEvent("activate", this)
},adjustFont:function(B)
{
  var C = B.id == "increasefontsize" ? 1 : -1;
  if (Ext.isSafari)
  {
    C *= 2
  }
  var A = parseInt(this.doc.queryCommandValue("FontSize") || 3, 10);
  A = Math.max(1, A + C);
  this.execCmd("FontSize", A + (Ext.isSafari ? "px" : 0))
},onEditorEvent:function(A)
{
  this.updateToolbar()
},updateToolbar:function()
{
  if (!this.activated)
  {
    this.onFirstFocus();
    return
  }
  var B = this.tb.items.map,C = this.doc;
  if (this.enableFont && !Ext.isSafari)
  {
    var A = (this.doc.queryCommandValue("FontName") || this.defaultFont).toLowerCase();
    if (A != this.fontSelect.dom.value)
    {
      this.fontSelect.dom.value = A
    }
  }
  if (this.enableFormat)
  {
    B.bold.toggle(C.queryCommandState("bold"));
    B.italic.toggle(C.queryCommandState("italic"));
    B.underline.toggle(C.queryCommandState("underline"))
  }
  if (this.enableAlignments)
  {
    B.justifyleft.toggle(C.queryCommandState("justifyleft"));
    B.justifycenter.toggle(C.queryCommandState("justifycenter"));
    B.justifyright.toggle(C.queryCommandState("justifyright"))
  }
  if (!Ext.isSafari && this.enableLists)
  {
    B.insertorderedlist.toggle(C.queryCommandState("insertorderedlist"));
    B.insertunorderedlist.toggle(C.queryCommandState("insertunorderedlist"))
  }
  Ext.menu.MenuMgr.hideAll();
  this.syncValue()
},relayBtnCmd:function(A)
{
  this.relayCmd(A.id)
},relayCmd:function(B, A)
{
  this.win.focus();
  this.execCmd(B, A);
  this.updateToolbar();
  this.deferFocus()
},execCmd:function(B, A)
{
  this.doc.execCommand(B, false, A === undefined ? null : A);
  this.syncValue()
},applyCommand:function(B)
{
  if (B.ctrlKey)
  {
    var C = B.getCharCode(),A;
    if (C > 0)
    {
      C = String.fromCharCode(C);
      switch (C)
          {case"b":A = "bold";break;case"i":A = "italic";break;case"u":A = "underline";break}
      if (A)
      {
        this.win.focus();
        this.execCmd(A);
        this.deferFocus();
        B.preventDefault()
      }
    }
  }
},insertAtCursor:function(B)
{
  if (!this.activated)
  {
    return
  }
  if (Ext.isIE)
  {
    this.win.focus();
    var A = this.doc.selection.createRange();
    if (A)
    {
      A.collapse(true);
      A.pasteHTML(B);
      this.syncValue();
      this.deferFocus()
    }
  } else
  {
    if (Ext.isGecko || Ext.isOpera)
    {
      this.win.focus();
      this.execCmd("InsertHTML", B);
      this.deferFocus()
    } else
    {
      if (Ext.isSafari)
      {
        this.execCmd("InsertText", B);
        this.deferFocus()
      }
    }
  }
},fixKeys:function()
{
  if (Ext.isIE)
  {
    return function(D)
    {
      var A = D.getKey(),B;
      if (A == D.TAB)
      {
        D.stopEvent();
        B = this.doc.selection.createRange();
        if (B)
        {
          B.collapse(true);
          B.pasteHTML("&nbsp;&nbsp;&nbsp;&nbsp;");
          this.deferFocus()
        }
      } else
      {
        if (A == D.ENTER)
        {
          B = this.doc.selection.createRange();
          if (B)
          {
            var C = B.parentElement();
            if (!C || C.tagName.toLowerCase() != "li")
            {
              D.stopEvent();
              B.pasteHTML("<br />");
              B.collapse(false);
              B.select()
            }
          }
        }
      }
    }
  } else
  {
    if (Ext.isOpera)
    {
      return function(B)
      {
        var A = B.getKey();
        if (A == B.TAB)
        {
          B.stopEvent();
          this.win.focus();
          this.execCmd("InsertHTML", "&nbsp;&nbsp;&nbsp;&nbsp;");
          this.deferFocus()
        }
      }
    } else
    {
      if (Ext.isSafari)
      {
        return function(B)
        {
          var A = B.getKey();
          if (A == B.TAB)
          {
            B.stopEvent();
            this.execCmd("InsertText", "\t");
            this.deferFocus()
          }
        }
      }
    }
  }
}(),getToolbar:function()
{
  return this.tb
},buttonTips:{bold:{title:"Bold (Ctrl+B)",text:"Make the selected text bold.",cls:"x-html-editor-tip"},italic:{title:"Italic (Ctrl+I)",text:"Make the selected text italic.",cls:"x-html-editor-tip"},underline:{title:"Underline (Ctrl+U)",text:"Underline the selected text.",cls:"x-html-editor-tip"},increasefontsize:{title:"Grow Text",text:"Increase the font size.",cls:"x-html-editor-tip"},decreasefontsize:{title:"Shrink Text",text:"Decrease the font size.",cls:"x-html-editor-tip"},backcolor:{title:"Text Highlight Color",text:"Change the background color of the selected text.",cls:"x-html-editor-tip"},forecolor:{title:"Font Color",text:"Change the color of the selected text.",cls:"x-html-editor-tip"},justifyleft:{title:"Align Text Left",text:"Align text to the left.",cls:"x-html-editor-tip"},justifycenter:{title:"Center Text",text:"Center text in the editor.",cls:"x-html-editor-tip"},justifyright:{title:"Align Text Right",text:"Align text to the right.",cls:"x-html-editor-tip"},insertunorderedlist:{title:"Bullet List",text:"Start a bulleted list.",cls:"x-html-editor-tip"},insertorderedlist:{title:"Numbered List",text:"Start a numbered list.",cls:"x-html-editor-tip"},createlink:{title:"Hyperlink",text:"Make the selected text a hyperlink.",cls:"x-html-editor-tip"},sourceedit:{title:"Source Edit",text:"Switch to source editing mode.",cls:"x-html-editor-tip"}}});
Ext.form.BasicForm = function(B, A)
{
  Ext.apply(this, A);
  this.items = new Ext.util.MixedCollection(false, function(C)
  {
    return C.id || (C.id = Ext.id())
  });
  this.addEvents({beforeaction:true,actionfailed:true,actioncomplete:true});
  if (B)
  {
    this.initEl(B)
  }
  Ext.form.BasicForm.superclass.constructor.call(this)
};
Ext.extend(Ext.form.BasicForm, Ext.util.Observable, {timeout:30,activeAction:null,trackResetOnLoad:false,waitMsgTarget:undefined,initEl:function(A)
{
  this.el = Ext.get(A);
  this.id = this.el.id || Ext.id();
  this.el.on("submit", this.onSubmit, this);
  this.el.addClass("x-form")
},onSubmit:function(A)
{
  A.stopEvent()
},isValid:function()
{
  var A = true;
  this.items.each(function(B)
  {
    if (!B.validate())
    {
      A = false
    }
  });
  return A
},isDirty:function()
{
  var A = false;
  this.items.each(function(B)
  {
    if (B.isDirty())
    {
      A = true;
      return false
    }
  });
  return A
},doAction:function(B, A)
{
  if (typeof B == "string")
  {
    B = new Ext.form.Action.ACTION_TYPES[B](this, A)
  }
  if (this.fireEvent("beforeaction", this, B) !== false)
  {
    this.beforeAction(B);
    B.run.defer(100, B)
  }
  return this
},submit:function(A)
{
  this.doAction("submit", A);
  return this
},load:function(A)
{
  this.doAction("load", A);
  return this
},updateRecord:function(B)
{
  B.beginEdit();
  var A = B.fields;
  A.each(function(C)
  {
    var D = this.findField(C.name);
    if (D)
    {
      B.set(C.name, D.getValue())
    }
  }, this);
  B.endEdit();
  return this
},loadRecord:function(A)
{
  this.setValues(A.data);
  return this
},beforeAction:function(A)
{
  var B = A.options;
  if (B.waitMsg)
  {
    if (this.waitMsgTarget === true)
    {
      this.el.mask(B.waitMsg, "x-mask-loading")
    } else
    {
      if (this.waitMsgTarget)
      {
        this.waitMsgTarget = Ext.get(this.waitMsgTarget);
        this.waitMsgTarget.mask(B.waitMsg, "x-mask-loading")
      } else
      {
        Ext.MessageBox.wait(B.waitMsg, B.waitTitle || this.waitTitle || "Please Wait...")
      }
    }
  }
},afterAction:function(A, C)
{
  this.activeAction = null;
  var B = A.options;
  if (B.waitMsg)
  {
    if (this.waitMsgTarget === true)
    {
      this.el.unmask()
    } else
    {
      if (this.waitMsgTarget)
      {
        this.waitMsgTarget.unmask()
      } else
      {
        Ext.MessageBox.updateProgress(1);
        Ext.MessageBox.hide()
      }
    }
  }
  if (C)
  {
    if (B.reset)
    {
      this.reset()
    }
    Ext.callback(B.success, B.scope, [this,A]);
    this.fireEvent("actioncomplete", this, A)
  } else
  {
    Ext.callback(B.failure, B.scope, [this,A]);
    this.fireEvent("actionfailed", this, A)
  }
},findField:function(B)
{
  var A = this.items.get(B);
  if (!A)
  {
    this.items.each(function(C)
    {
      if (C.isFormField && (C.dataIndex == B || C.id == B || C.getName() == B))
      {
        A = C;
        return false
      }
    })
  }
  return A || null
},markInvalid:function(G)
{
  if (G instanceof Array)
  {
    for (var C = 0,A = G.length; C < A; C++)
    {
      var B = G[C];
      var D = this.findField(B.id);
      if (D)
      {
        D.markInvalid(B.msg)
      }
    }
  } else
  {
    var E,F;
    for (F in G)
    {
      if (typeof G[F] != "function" && (E = this.findField(F)))
      {
        E.markInvalid(G[F])
      }
    }
  }
  return this
},setValues:function(C)
{
  if (C instanceof Array)
  {
    for (var D = 0,A = C.length; D < A; D++)
    {
      var B = C[D];
      var E = this.findField(B.id);
      if (E)
      {
        E.setValue(B.value);
        if (this.trackResetOnLoad)
        {
          E.originalValue = E.getValue()
        }
      }
    }
  } else
  {
    var F,G;
    for (G in C)
    {
      if (typeof C[G] != "function" && (F = this.findField(G)))
      {
        F.setValue(C[G]);
        if (this.trackResetOnLoad)
        {
          F.originalValue = F.getValue()
        }
      }
    }
  }
  return this
},getValues:function(B)
{
  var A = Ext.lib.Ajax.serializeForm(this.el.dom);
  if (B === true)
  {
    return A
  }
  return Ext.urlDecode(A)
},clearInvalid:function()
{
  this.items.each(function(A)
  {
    A.clearInvalid()
  });
  return this
},reset:function()
{
  this.items.each(function(A)
  {
    A.reset()
  });
  return this
},add:function()
{
  this.items.addAll(Array.prototype.slice.call(arguments, 0));
  return this
},remove:function(A)
{
  this.items.remove(A);
  return this
},render:function()
{
  this.items.each(function(A)
  {
    if (A.isFormField && !A.rendered && document.getElementById(A.id))
    {
      A.applyTo(A.id)
    }
  });
  return this
},applyToFields:function(A)
{
  this.items.each(function(B)
  {
    Ext.apply(B, A)
  });
  return this
},applyIfToFields:function(A)
{
  this.items.each(function(B)
  {
    Ext.applyIf(B, A)
  });
  return this
}});
Ext.BasicForm = Ext.form.BasicForm;
Ext.form.Form = function(A)
{
  Ext.form.Form.superclass.constructor.call(this, null, A);
  this.url = this.url || this.action;
  if (!this.root)
  {
    this.root = new Ext.form.Layout(Ext.applyIf({id:Ext.id()}, A))
  }
  this.active = this.root;
  this.buttons = [];
  this.addEvents({clientvalidation:true})
};
Ext.extend(Ext.form.Form, Ext.form.BasicForm, {buttonAlign:"center",minButtonWidth:75,labelAlign:"left",monitorValid:false,monitorPoll:200,column:function(B)
{
  var A = new Ext.form.Column(B);
  this.start(A);
  if (arguments.length > 1)
  {
    this.add.apply(this, Array.prototype.slice.call(arguments, 1));
    this.end()
  }
  return A
},fieldset:function(B)
{
  var A = new Ext.form.FieldSet(B);
  this.start(A);
  if (arguments.length > 1)
  {
    this.add.apply(this, Array.prototype.slice.call(arguments, 1));
    this.end()
  }
  return A
},container:function(B)
{
  var A = new Ext.form.Layout(B);
  this.start(A);
  if (arguments.length > 1)
  {
    this.add.apply(this, Array.prototype.slice.call(arguments, 1));
    this.end()
  }
  return A
},start:function(A)
{
  Ext.applyIf(A, {"labelAlign":this.active.labelAlign,"labelWidth":this.active.labelWidth,"itemCls":this.active.itemCls});
  this.active.stack.push(A);
  A.ownerCt = this.active;
  this.active = A;
  return this
},end:function()
{
  if (this.active == this.root)
  {
    return this
  }
  this.active = this.active.ownerCt;
  return this
},add:function()
{
  this.active.stack.push.apply(this.active.stack, arguments);
  var D = [];
  for (var C = 0,B = arguments,A = B.length; C < A; C++)
  {
    if (B[C].isFormField)
    {
      D.push(B[C])
    }
  }
  if (D.length > 0)
  {
    Ext.form.Form.superclass.add.apply(this, D)
  }
  return this
},render:function(E)
{
  E = Ext.get(E);
  var G = this.autoCreate || {tag:"form",method:this.method || "POST",id:this.id || Ext.id()};
  this.initEl(E.createChild(G));
  this.root.render(this.el);
  this.items.each(function(I)
  {
    I.render("x-form-el-" + I.id)
  });
  if (this.buttons.length > 0)
  {
    var C = this.el.createChild({cls:"x-form-btns-ct",cn:{cls:"x-form-btns x-form-btns-" + this.buttonAlign,html:"<table cellspacing=\"0\"><tbody><tr></tr></tbody></table><div class=\"x-clear\"></div>"}}, null, true);
    var F = C.getElementsByTagName("tr")[0];
    for (var D = 0,B = this.buttons.length; D < B; D++)
    {
      var A = this.buttons[D];
      var H = document.createElement("td");
      H.className = "x-form-btn-td";
      A.render(F.appendChild(H))
    }
  }
  if (this.monitorValid)
  {
    this.startMonitoring()
  }
  return this
},addButton:function(A, D, C)
{
  var E = {handler:D,scope:C,minWidth:this.minButtonWidth,hideParent:true};
  if (typeof A == "string")
  {
    E.text = A
  } else
  {
    Ext.apply(E, A)
  }
  var B = new Ext.Button(null, E);
  this.buttons.push(B);
  return B
},startMonitoring:function()
{
  if (!this.bound)
  {
    this.bound = true;
    Ext.TaskMgr.start({run:this.bindHandler,interval:this.monitorPoll || 200,scope:this})
  }
},stopMonitoring:function()
{
  this.bound = false
},bindHandler:function()
{
  if (!this.bound)
  {
    return false
  }
  var D = true;
  this.items.each(function(E)
  {
    if (!E.isValid(true))
    {
      D = false;
      return false
    }
  });
  for (var C = 0,A = this.buttons.length; C < A; C++)
  {
    var B = this.buttons[C];
    if (B.formBind === true && B.disabled === D)
    {
      B.setDisabled(!D)
    }
  }
  this.fireEvent("clientvalidation", this, D)
}});
Ext.Form = Ext.form.Form;
Ext.form.Action = function(B, A)
{
  this.form = B;
  this.options = A || {}
};
Ext.form.Action.CLIENT_INVALID = "client";
Ext.form.Action.SERVER_INVALID = "server";
Ext.form.Action.CONNECT_FAILURE = "connect";
Ext.form.Action.LOAD_FAILURE = "load";
Ext.form.Action.prototype = {type:"default",failureType:undefined,response:undefined,result:undefined,run:function(A)
{
},success:function(A)
{
},handleResponse:function(A)
{
},failure:function(A)
{
  this.response = A;
  this.failureType = Ext.form.Action.CONNECT_FAILURE;
  this.form.afterAction(this, false)
},processResponse:function(A)
{
  this.response = A;
  if (!A.responseText)
  {
    return true
  }
  this.result = this.handleResponse(A);
  return this.result
},getUrl:function(C)
{
  var A = this.options.url || this.form.url || this.form.el.dom.action;
  if (C)
  {
    var B = this.getParams();
    if (B)
    {
      A += (A.indexOf("?") != -1 ? "&" : "?") + B
    }
  }
  return A
},getMethod:function()
{
  return(this.options.method || this.form.method || this.form.el.dom.method || "POST").toUpperCase()
},getParams:function()
{
  var A = this.form.baseParams;
  var B = this.options.params;
  if (B)
  {
    if (typeof B == "object")
    {
      B = Ext.urlEncode(Ext.applyIf(B, A))
    } else
    {
      if (typeof B == "string" && A)
      {
        B += "&" + Ext.urlEncode(A)
      }
    }
  } else
  {
    if (A)
    {
      B = Ext.urlEncode(A)
    }
  }
  return B
},createCallback:function()
{
  return{success:this.success,failure:this.failure,scope:this,timeout:(this.form.timeout * 1000),upload:this.form.fileUpload ? this.success : undefined}
}};
Ext.form.Action.Submit = function(B, A)
{
  Ext.form.Action.Submit.superclass.constructor.call(this, B, A)
};
Ext.extend(Ext.form.Action.Submit, Ext.form.Action, {type:"submit",run:function()
{
  var B = this.options;
  var C = this.getMethod();
  var A = C == "POST";
  if (B.clientValidation === false || this.form.isValid())
  {
    Ext.Ajax.request(Ext.apply(this.createCallback(), {form:this.form.el.dom,url:this.getUrl(!A),method:C,params:A ? this.getParams() : null,isUpload:this.form.fileUpload}))
  } else
  {
    if (B.clientValidation !== false)
    {
      this.failureType = Ext.form.Action.CLIENT_INVALID;
      this.form.afterAction(this, false)
    }
  }
},success:function(B)
{
  var A = this.processResponse(B);
  if (A === true || A.success)
  {
    this.form.afterAction(this, true);
    return
  }
  if (A.errors)
  {
    this.form.markInvalid(A.errors);
    this.failureType = Ext.form.Action.SERVER_INVALID
  }
  this.form.afterAction(this, false)
},handleResponse:function(C)
{
  if (this.form.errorReader)
  {
    var B = this.form.errorReader.read(C);
    var F = [];
    if (B.records)
    {
      for (var D = 0,A = B.records.length; D < A; D++)
      {
        var E = B.records[D];
        F[D] = E.data
      }
    }
    if (F.length < 1)
    {
      F = null
    }
    return{success:B.success,errors:F}
  }
  return Ext.decode(C.responseText)
}});
Ext.form.Action.Load = function(B, A)
{
  Ext.form.Action.Load.superclass.constructor.call(this, B, A);
  this.reader = this.form.reader
};
Ext.extend(Ext.form.Action.Load, Ext.form.Action, {type:"load",run:function()
{
  Ext.Ajax.request(Ext.apply(this.createCallback(), {method:this.getMethod(),url:this.getUrl(false),params:this.getParams()}))
},success:function(B)
{
  var A = this.processResponse(B);
  if (A === true || !A.success || !A.data)
  {
    this.failureType = Ext.form.Action.LOAD_FAILURE;
    this.form.afterAction(this, false);
    return
  }
  this.form.clearInvalid();
  this.form.setValues(A.data);
  this.form.afterAction(this, true)
},handleResponse:function(B)
{
  if (this.form.reader)
  {
    var A = this.form.reader.read(B);
    var C = A.records && A.records[0] ? A.records[0].data : null;
    return{success:A.success,data:C}
  }
  return Ext.decode(B.responseText)
}});
Ext.form.Action.ACTION_TYPES = {"load":Ext.form.Action.Load,"submit":Ext.form.Action.Submit};
Ext.form.Layout = function(A)
{
  Ext.form.Layout.superclass.constructor.call(this, A);
  this.stack = []
};
Ext.extend(Ext.form.Layout, Ext.Component, {clear:true,labelSeparator:":",hideLabels:false,defaultAutoCreate:{tag:"div",cls:"x-form-ct"},onRender:function(F, B)
{
  if (this.el)
  {
    this.el = Ext.get(this.el)
  } else
  {
    var C = this.getAutoCreate();
    this.el = F.createChild(C, B)
  }
  if (this.style)
  {
    this.el.applyStyles(this.style)
  }
  if (this.labelAlign)
  {
    this.el.addClass("x-form-label-" + this.labelAlign)
  }
  if (this.hideLabels)
  {
    this.labelStyle = "display:none";
    this.elementStyle = "padding-left:0;"
  } else
  {
    if (typeof this.labelWidth == "number")
    {
      this.labelStyle = "width:" + this.labelWidth + "px;";
      this.elementStyle = "padding-left:" + ((this.labelWidth + (typeof this.labelPad == "number" ? this.labelPad : 5)) + "px") + ";"
    }
    if (this.labelAlign == "top")
    {
      this.labelStyle = "width:auto;";
      this.elementStyle = "padding-left:0;"
    }
  }
  var A = this.stack;
  var G = A.length;
  if (G > 0)
  {
    if (!this.fieldTpl)
    {
      var E = new Ext.Template("<div class=\"x-form-item {5}\">", "<label for=\"{0}\" style=\"{2}\">{1}{4}</label>", "<div class=\"x-form-element\" id=\"x-form-el-{0}\" style=\"{3}\">", "</div>", "</div><div class=\"x-form-clear-left\"></div>");
      E.disableFormats = true;
      E.compile();
      Ext.form.Layout.prototype.fieldTpl = E
    }
    for (var D = 0; D < G; D++)
    {
      if (A[D].isFormField)
      {
        this.renderField(A[D])
      } else
      {
        this.renderComponent(A[D])
      }
    }
  }
  if (this.clear)
  {
    this.el.createChild({cls:"x-form-clear"})
  }
},renderField:function(A)
{
  this.fieldTpl.append(this.el, [A.id,A.fieldLabel,A.labelStyle || this.labelStyle || "",this.elementStyle || "",typeof A.labelSeparator == "undefined" ? this.labelSeparator : A.labelSeparator,A.itemCls || this.itemCls || ""])
},renderComponent:function(A)
{
  A.render(this.el)
}});
Ext.form.Column = function(A)
{
  Ext.form.Column.superclass.constructor.call(this, A)
};
Ext.extend(Ext.form.Column, Ext.form.Layout, {defaultAutoCreate:{tag:"div",cls:"x-form-ct x-form-column"},onRender:function(B, A)
{
  Ext.form.Column.superclass.onRender.call(this, B, A);
  if (this.width)
  {
    this.el.setWidth(this.width)
  }
}});
Ext.form.FieldSet = function(A)
{
  Ext.form.FieldSet.superclass.constructor.call(this, A)
};
Ext.extend(Ext.form.FieldSet, Ext.form.Layout, {defaultAutoCreate:{tag:"fieldset",cn:{tag:"legend"}},onRender:function(B, A)
{
  Ext.form.FieldSet.superclass.onRender.call(this, B, A);
  if (this.legend)
  {
    this.setLegend(this.legend)
  }
},setLegend:function(A)
{
  if (this.rendered)
  {
    this.el.child("legend").update(A)
  }
}});
Ext.form.VTypes = function()
{
  var C = /^[a-zA-Z_]+$/;
  var D = /^[a-zA-Z0-9_]+$/;
  var B = /^([\w]+)(.[\w]+)*@([\w-]+\.){1,5}([A-Za-z]){2,4}$/;
  var A = /(((https?)|(ftp)):\/\/([\-\w]+\.)+\w{2,3}(\/[%\-\w]+(\.\w{2,})?)*(([\w\-\.\?\\\/+@&#;`~=%!]*)(\.\w{2,})?)*\/?)/i;
  return{"email":function(E)
  {
    return B.test(E)
  },"emailText":"This field should be an e-mail address in the format \"user@domain.com\"","emailMask":/[a-z0-9_\.\-@]/i,"url":function(E)
  {
    return A.test(E)
  },"urlText":"This field should be a URL in the format \"http:/" + "/www.domain.com\"","alpha":function(E)
  {
    return C.test(E)
  },"alphaText":"This field should only contain letters and _","alphaMask":/[a-z_]/i,"alphanum":function(E)
  {
    return D.test(E)
  },"alphanumText":"This field should only contain letters, numbers and _","alphanumMask":/[a-z0-9_]/i}
}();
Ext.LayoutManager = function(A, B)
{
  Ext.LayoutManager.superclass.constructor.call(this);
  this.el = Ext.get(A);
  if (this.el.dom == document.body && Ext.isIE && !B.allowScroll)
  {
    document.body.scroll = "no"
  } else
  {
    if (this.el.dom != document.body && this.el.getStyle("position") == "static")
    {
      this.el.position("relative")
    }
  }
  this.id = this.el.id;
  this.el.addClass("x-layout-container");
  this.monitorWindowResize = true;
  this.regions = {};
  this.addEvents({"layout":true,"regionresized":true,"regioncollapsed":true,"regionexpanded":true});
  this.updating = false;
  Ext.EventManager.onWindowResize(this.onWindowResize, this, true)
};
Ext.extend(Ext.LayoutManager, Ext.util.Observable, {isUpdating:function()
{
  return this.updating
},beginUpdate:function()
{
  this.updating = true
},endUpdate:function(A)
{
  this.updating = false;
  if (!A)
  {
    this.layout()
  }
},layout:function()
{
},onRegionResized:function(B, A)
{
  this.fireEvent("regionresized", B, A);
  this.layout()
},onRegionCollapsed:function(A)
{
  this.fireEvent("regioncollapsed", A)
},onRegionExpanded:function(A)
{
  this.fireEvent("regionexpanded", A)
},getViewSize:function()
{
  var A;
  if (this.el.dom != document.body)
  {
    A = this.el.getSize()
  } else
  {
    A = {width:Ext.lib.Dom.getViewWidth(),height:Ext.lib.Dom.getViewHeight()}
  }
  A.width -= this.el.getBorderWidth("lr") - this.el.getPadding("lr");
  A.height -= this.el.getBorderWidth("tb") - this.el.getPadding("tb");
  return A
},getEl:function()
{
  return this.el
},getRegion:function(A)
{
  return this.regions[A.toLowerCase()]
},onWindowResize:function()
{
  if (this.monitorWindowResize)
  {
    this.layout()
  }
}});
Ext.BorderLayout = function(B, C)
{
  C = C || {};
  Ext.BorderLayout.superclass.constructor.call(this, B, C);
  this.factory = C.factory || Ext.BorderLayout.RegionFactory;
  for (var D = 0,A = this.factory.validRegions.length; D < A; D++)
  {
    var E = this.factory.validRegions[D];
    if (C[E])
    {
      this.addRegion(E, C[E])
    }
  }
};
Ext.extend(Ext.BorderLayout, Ext.LayoutManager, {addRegion:function(C, A)
{
  if (!this.regions[C])
  {
    var B = this.factory.create(C, this, A);
    this.bindRegion(C, B)
  }
  return this.regions[C]
},bindRegion:function(A, B)
{
  this.regions[A] = B;
  B.on("visibilitychange", this.layout, this);
  B.on("paneladded", this.layout, this);
  B.on("panelremoved", this.layout, this);
  B.on("invalidated", this.layout, this);
  B.on("resized", this.onRegionResized, this);
  B.on("collapsed", this.onRegionCollapsed, this);
  B.on("expanded", this.onRegionExpanded, this)
},layout:function()
{
  if (this.updating)
  {
    return
  }
  var J = this.getViewSize();
  var H = J.width,N = J.height;
  var G = H,M = N,E = 0,F = 0;
  var D = this.regions;
  var K = D["north"],I = D["south"],C = D["west"],O = D["east"],P = D["center"];
  if (K && K.isVisible())
  {
    var Q = K.getBox();
    var L = K.getMargins();
    Q.width = H - (L.left + L.right);
    Q.x = L.left;
    Q.y = L.top;
    E = Q.height + Q.y + L.bottom;
    M -= E;
    K.updateBox(this.safeBox(Q))
  }
  if (I && I.isVisible())
  {
    var Q = I.getBox();
    var L = I.getMargins();
    Q.width = H - (L.left + L.right);
    Q.x = L.left;
    var R = (Q.height + L.top + L.bottom);
    Q.y = N - R + L.top;
    M -= R;
    I.updateBox(this.safeBox(Q))
  }
  if (C && C.isVisible())
  {
    var Q = C.getBox();
    var L = C.getMargins();
    Q.height = M - (L.top + L.bottom);
    Q.x = L.left;
    Q.y = E + L.top;
    var A = (Q.width + L.left + L.right);
    F += A;
    G -= A;
    C.updateBox(this.safeBox(Q))
  }
  if (O && O.isVisible())
  {
    var Q = O.getBox();
    var L = O.getMargins();
    Q.height = M - (L.top + L.bottom);
    var A = (Q.width + L.left + L.right);
    Q.x = H - A + L.left;
    Q.y = E + L.top;
    G -= A;
    O.updateBox(this.safeBox(Q))
  }
  if (P)
  {
    var L = P.getMargins();
    var B = {x:F + L.left,y:E + L.top,width:G - (L.left + L.right),height:M - (L.top + L.bottom)};
    P.updateBox(this.safeBox(B))
  }
  this.el.repaint();
  this.fireEvent("layout", this)
},safeBox:function(A)
{
  A.width = Math.max(0, A.width);
  A.height = Math.max(0, A.height);
  return A
},add:function(B, A)
{
  B = B.toLowerCase();
  return this.regions[B].add(A)
},remove:function(B, A)
{
  B = B.toLowerCase();
  return this.regions[B].remove(A)
},findPanel:function(B)
{
  var A = this.regions;
  for (var D in A)
  {
    if (typeof A[D] != "function")
    {
      var C = A[D].getPanel(B);
      if (C)
      {
        return C
      }
    }
  }
  return null
},showPanel:function(B)
{
  var A = this.regions;
  for (var D in A)
  {
    var C = A[D];
    if (typeof C != "function")
    {
      if (C.hasPanel(B))
      {
        return C.showPanel(B)
      }
    }
  }
  return null
},restoreState:function(A)
{
  if (!A)
  {
    A = Ext.state.Manager
  }
  var B = new Ext.LayoutStateManager();
  B.init(this, A)
},batchAdd:function(C)
{
  this.beginUpdate();
  for (var B in C)
  {
    var A = this.regions[B];
    if (A)
    {
      this.addTypedPanels(A, C[B])
    }
  }
  this.endUpdate()
},addTypedPanels:function(B, E)
{
  if (typeof E == "string")
  {
    B.add(new Ext.ContentPanel(E))
  } else
  {
    if (E instanceof Array)
    {
      for (var C = 0,A = E.length; C < A; C++)
      {
        this.addTypedPanels(B, E[C])
      }
    } else
    {
      if (!E.events)
      {
        var D = E.el;
        delete E.el;
        B.add(new Ext.ContentPanel(D || Ext.id(), E))
      } else
      {
        B.add(E)
      }
    }
  }
}});
Ext.BorderLayout.create = function(C, H)
{
  var G = new Ext.BorderLayout(H || document.body, C);
  G.beginUpdate();
  var D = Ext.BorderLayout.RegionFactory.validRegions;
  for (var E = 0,I = D.length; E < I; E++)
  {
    var F = D[E];
    if (G.regions[F] && C[F].panels)
    {
      var B = G.regions[F];
      var A = C[F].panels;
      G.addTypedPanels(B, A)
    }
  }
  G.endUpdate();
  return G
};
Ext.BorderLayout.RegionFactory = {validRegions:["north","south","east","west","center"],create:function(C, B, A)
{
  C = C.toLowerCase();
  if (A.lightweight || A.basic)
  {
    return new Ext.BasicLayoutRegion(B, A, C)
  }
  switch (C)
      {case"north":return new Ext.NorthLayoutRegion(B, A);case"south":return new Ext.SouthLayoutRegion(B, A);case"east":return new Ext.EastLayoutRegion(B, A);case"west":return new Ext.WestLayoutRegion(B, A);case"center":return new Ext.CenterLayoutRegion(B, A)}
  throw"Layout region \"" + C + "\" not supported."
}};
Ext.BasicLayoutRegion = function(C, B, D, A)
{
  this.mgr = C;
  this.position = D;
  this.events = {"beforeremove":true,"invalidated":true,"visibilitychange":true,"paneladded":true,"panelremoved":true,"collapsed":true,"expanded":true,"slideshow":true,"slidehide":true,"panelactivated":true,"resized":true};
  this.panels = new Ext.util.MixedCollection();
  this.panels.getKey = this.getPanelId.createDelegate(this);
  this.box = null;
  this.activePanel = null;
  if (A !== true)
  {
    this.applyConfig(B)
  }
};
Ext.extend(Ext.BasicLayoutRegion, Ext.util.Observable, {getPanelId:function(A)
{
  return A.getId()
},applyConfig:function(A)
{
  this.margins = A.margins || this.margins || {top:0,left:0,right:0,bottom:0};
  this.config = A
},resizeTo:function(A)
{
  var B = this.el ? this.el : (this.activePanel ? this.activePanel.getEl() : null);
  if (B)
  {
    switch (this.position)
        {case"east":case"west":B.setWidth(A);this.fireEvent("resized", this, A);break;case"north":case"south":B.setHeight(A);this.fireEvent("resized", this, A);break}
  }
},getBox:function()
{
  return this.activePanel ? this.activePanel.getEl().getBox(false, true) : null
},getMargins:function()
{
  return this.margins
},updateBox:function(B)
{
  this.box = B;
  var A = this.activePanel.getEl();
  A.dom.style.left = B.x + "px";
  A.dom.style.top = B.y + "px";
  this.activePanel.setSize(B.width, B.height)
},getEl:function()
{
  return this.activePanel
},isVisible:function()
{
  return this.activePanel ? true : false
},setActivePanel:function(A)
{
  A = this.getPanel(A);
  if (this.activePanel && this.activePanel != A)
  {
    this.activePanel.setActiveState(false);
    this.activePanel.getEl().setLeftTop(-10000, -10000)
  }
  this.activePanel = A;
  A.setActiveState(true);
  if (this.box)
  {
    A.setSize(this.box.width, this.box.height)
  }
  this.fireEvent("panelactivated", this, A);
  this.fireEvent("invalidated")
},showPanel:function(A)
{
  if (A = this.getPanel(A))
  {
    this.setActivePanel(A)
  }
  return A
},getActivePanel:function()
{
  return this.activePanel
},add:function(B)
{
  if (arguments.length > 1)
  {
    for (var C = 0,A = arguments.length; C < A; C++)
    {
      this.add(arguments[C])
    }
    return null
  }
  if (this.hasPanel(B))
  {
    this.showPanel(B);
    return B
  }
  var D = B.getEl();
  if (D.dom.parentNode != this.mgr.el.dom)
  {
    this.mgr.el.dom.appendChild(D.dom)
  }
  if (B.setRegion)
  {
    B.setRegion(this)
  }
  this.panels.add(B);
  D.setStyle("position", "absolute");
  if (!B.background)
  {
    this.setActivePanel(B);
    if (this.config.initialSize && this.panels.getCount() == 1)
    {
      this.resizeTo(this.config.initialSize)
    }
  }
  this.fireEvent("paneladded", this, B);
  return B
},hasPanel:function(A)
{
  if (typeof A == "object")
  {
    A = A.getId()
  }
  return this.getPanel(A) ? true : false
},remove:function(B, A)
{
  B = this.getPanel(B);
  if (!B)
  {
    return null
  }
  var D = {};
  this.fireEvent("beforeremove", this, B, D);
  if (D.cancel === true)
  {
    return null
  }
  var C = B.getId();
  this.panels.removeKey(C);
  return B
},getPanel:function(A)
{
  if (typeof A == "object")
  {
    return A
  }
  return this.panels.get(A)
},getPosition:function()
{
  return this.position
}});
Ext.LayoutRegion = function(C, A, D)
{
  Ext.LayoutRegion.superclass.constructor.call(this, C, A, D, true);
  var B = Ext.DomHelper;
  this.el = B.append(C.el.dom, {tag:"div",cls:"x-layout-panel x-layout-panel-" + this.position}, true);
  this.titleEl = B.append(this.el.dom, {tag:"div",unselectable:"on",cls:"x-unselectable x-layout-panel-hd x-layout-title-" + this.position,children:[{tag:"span",cls:"x-unselectable x-layout-panel-hd-text",unselectable:"on",html:"&#160;"},{tag:"div",cls:"x-unselectable x-layout-panel-hd-tools",unselectable:"on"}]}, true);
  this.titleEl.enableDisplayMode();
  this.titleTextEl = this.titleEl.dom.firstChild;
  this.tools = Ext.get(this.titleEl.dom.childNodes[1], true);
  this.closeBtn = this.createTool(this.tools.dom, "x-layout-close");
  this.closeBtn.enableDisplayMode();
  this.closeBtn.on("click", this.closeClicked, this);
  this.closeBtn.hide();
  this.createBody(A);
  this.visible = true;
  this.collapsed = false;
  if (A.hideWhenEmpty)
  {
    this.hide();
    this.on("paneladded", this.validateVisibility, this);
    this.on("panelremoved", this.validateVisibility, this)
  }
  this.applyConfig(A)
};
Ext.extend(Ext.LayoutRegion, Ext.BasicLayoutRegion, {createBody:function()
{
  this.bodyEl = this.el.createChild({tag:"div",cls:"x-layout-panel-body"})
},applyConfig:function(B)
{
  if (B.collapsible && this.position != "center" && !this.collapsedEl)
  {
    var A = Ext.DomHelper;
    if (B.titlebar !== false)
    {
      this.collapseBtn = this.createTool(this.tools.dom, "x-layout-collapse-" + this.position);
      this.collapseBtn.on("click", this.collapse, this);
      this.collapseBtn.enableDisplayMode();
      if (B.showPin === true || this.showPin)
      {
        this.stickBtn = this.createTool(this.tools.dom, "x-layout-stick");
        this.stickBtn.enableDisplayMode();
        this.stickBtn.on("click", this.expand, this);
        this.stickBtn.hide()
      }
    }
    this.collapsedEl = A.append(this.mgr.el.dom, {cls:"x-layout-collapsed x-layout-collapsed-" + this.position,children:[{cls:"x-layout-collapsed-tools",children:[{cls:"x-layout-ctools-inner"}]}]}, true);
    if (B.floatable !== false)
    {
      this.collapsedEl.addClassOnOver("x-layout-collapsed-over");
      this.collapsedEl.on("click", this.collapseClick, this)
    }
    if (B.collapsedTitle && (this.position == "north" || this.position == "south"))
    {
      this.collapsedTitleTextEl = A.append(this.collapsedEl.dom, {tag:"div",cls:"x-unselectable x-layout-panel-hd-text",id:"message",unselectable:"on",style:{"float":"left"}});
      this.collapsedTitleTextEl.innerHTML = B.collapsedTitle
    }
    this.expandBtn = this.createTool(this.collapsedEl.dom.firstChild.firstChild, "x-layout-expand-" + this.position);
    this.expandBtn.on("click", this.expand, this)
  }
  if (this.collapseBtn)
  {
    this.collapseBtn.setVisible(B.collapsible == true)
  }
  this.cmargins = B.cmargins || this.cmargins || (this.position == "west" || this.position == "east" ? {top:0,left:2,right:2,bottom:0} : {top:2,left:0,right:0,bottom:2});
  this.margins = B.margins || this.margins || {top:0,left:0,right:0,bottom:0};
  this.bottomTabs = B.tabPosition != "top";
  this.autoScroll = B.autoScroll || false;
  if (this.autoScroll)
  {
    this.bodyEl.setStyle("overflow", "auto")
  } else
  {
    this.bodyEl.setStyle("overflow", "hidden")
  }
  if ((!B.titlebar && !B.title) || B.titlebar === false)
  {
    this.titleEl.hide()
  } else
  {
    this.titleEl.show();
    if (B.title)
    {
      this.titleTextEl.innerHTML = B.title
    }
  }
  this.duration = B.duration || 0.3;
  this.slideDuration = B.slideDuration || 0.45;
  this.config = B;
  if (B.collapsed)
  {
    this.collapse(true)
  }
  if (B.hidden)
  {
    this.hide()
  }
},isVisible:function()
{
  return this.visible
},setCollapsedTitle:function(A)
{
  A = A || "&#160;";
  if (this.collapsedTitleTextEl)
  {
    this.collapsedTitleTextEl.innerHTML = A
  }
},getBox:function()
{
  var A;
  if (!this.collapsed)
  {
    A = this.el.getBox(false, true)
  } else
  {
    A = this.collapsedEl.getBox(false, true)
  }
  return A
},getMargins:function()
{
  return this.collapsed ? this.cmargins : this.margins
},highlight:function()
{
  this.el.addClass("x-layout-panel-dragover")
},unhighlight:function()
{
  this.el.removeClass("x-layout-panel-dragover")
},updateBox:function(A)
{
  this.box = A;
  if (!this.collapsed)
  {
    this.el.dom.style.left = A.x + "px";
    this.el.dom.style.top = A.y + "px";
    this.updateBody(A.width, A.height)
  } else
  {
    this.collapsedEl.dom.style.left = A.x + "px";
    this.collapsedEl.dom.style.top = A.y + "px";
    this.collapsedEl.setSize(A.width, A.height)
  }
  if (this.tabs)
  {
    this.tabs.autoSizeTabs()
  }
},updateBody:function(A, C)
{
  if (A !== null)
  {
    this.el.setWidth(A);
    A -= this.el.getBorderWidth("rl");
    if (this.config.adjustments)
    {
      A += this.config.adjustments[0]
    }
  }
  if (C !== null)
  {
    this.el.setHeight(C);
    C = this.titleEl && this.titleEl.isDisplayed() ? C - (this.titleEl.getHeight() || 0) : C;
    C -= this.el.getBorderWidth("tb");
    if (this.config.adjustments)
    {
      C += this.config.adjustments[1]
    }
    this.bodyEl.setHeight(C);
    if (this.tabs)
    {
      C = this.tabs.syncHeight(C)
    }
  }
  if (this.panelSize)
  {
    A = A !== null ? A : this.panelSize.width;
    C = C !== null ? C : this.panelSize.height
  }
  if (this.activePanel)
  {
    var B = this.activePanel.getEl();
    A = A !== null ? A : B.getWidth();
    C = C !== null ? C : B.getHeight();
    this.panelSize = {width:A,height:C};
    this.activePanel.setSize(A, C)
  }
  if (Ext.isIE && this.tabs)
  {
    this.tabs.el.repaint()
  }
},getEl:function()
{
  return this.el
},hide:function()
{
  if (!this.collapsed)
  {
    this.el.dom.style.left = "-2000px";
    this.el.hide()
  } else
  {
    this.collapsedEl.dom.style.left = "-2000px";
    this.collapsedEl.hide()
  }
  this.visible = false;
  this.fireEvent("visibilitychange", this, false)
},show:function()
{
  if (!this.collapsed)
  {
    this.el.show()
  } else
  {
    this.collapsedEl.show()
  }
  this.visible = true;
  this.fireEvent("visibilitychange", this, true)
},closeClicked:function()
{
  if (this.activePanel)
  {
    this.remove(this.activePanel)
  }
},collapseClick:function(A)
{
  if (this.isSlid)
  {
    A.stopPropagation();
    this.slideIn()
  } else
  {
    A.stopPropagation();
    this.slideOut()
  }
},collapse:function(A)
{
  if (this.collapsed)
  {
    return
  }
  this.collapsed = true;
  if (this.split)
  {
    this.split.el.hide()
  }
  if (this.config.animate && A !== true)
  {
    this.fireEvent("invalidated", this);
    this.animateCollapse()
  } else
  {
    this.el.setLocation(-20000, -20000);
    this.el.hide();
    this.collapsedEl.show();
    this.fireEvent("collapsed", this);
    this.fireEvent("invalidated", this)
  }
},animateCollapse:function()
{
},expand:function(B, A)
{
  if (B)
  {
    B.stopPropagation()
  }
  if (!this.collapsed || this.el.hasActiveFx())
  {
    return
  }
  if (this.isSlid)
  {
    this.afterSlideIn();
    A = true
  }
  this.collapsed = false;
  if (this.config.animate && A !== true)
  {
    this.animateExpand()
  } else
  {
    this.el.show();
    if (this.split)
    {
      this.split.el.show()
    }
    this.collapsedEl.setLocation(-2000, -2000);
    this.collapsedEl.hide();
    this.fireEvent("invalidated", this);
    this.fireEvent("expanded", this)
  }
},animateExpand:function()
{
},initTabs:function()
{
  this.bodyEl.setStyle("overflow", "hidden");
  var A = new Ext.TabPanel(this.bodyEl.dom, {tabPosition:this.bottomTabs ? "bottom" : "top",disableTooltips:this.config.disableTabTips});
  if (this.config.hideTabs)
  {
    A.stripWrap.setDisplayed(false)
  }
  this.tabs = A;
  A.resizeTabs = this.config.resizeTabs === true;
  A.minTabWidth = this.config.minTabWidth || 40;
  A.maxTabWidth = this.config.maxTabWidth || 250;
  A.preferredTabWidth = this.config.preferredTabWidth || 150;
  A.monitorResize = false;
  A.bodyEl.setStyle("overflow", this.config.autoScroll ? "auto" : "hidden");
  A.bodyEl.addClass("x-layout-tabs-body");
  this.panels.each(this.initPanelAsTab, this)
},initPanelAsTab:function(A)
{
  var B = this.tabs.addTab(A.getEl().id, A.getTitle(), null, this.config.closeOnTab && A.isClosable());
  if (A.tabTip !== undefined)
  {
    B.setTooltip(A.tabTip)
  }
  B.on("activate", function()
  {
    this.setActivePanel(A)
  }, this);
  if (this.config.closeOnTab)
  {
    B.on("beforeclose", function(C, D)
    {
      D.cancel = true;
      this.remove(A)
    }, this)
  }
  return B
},updatePanelTitle:function(A, C)
{
  if (this.activePanel == A)
  {
    this.updateTitle(C)
  }
  if (this.tabs)
  {
    var B = this.tabs.getTab(A.getEl().id);
    B.setText(C);
    if (A.tabTip !== undefined)
    {
      B.setTooltip(A.tabTip)
    }
  }
},updateTitle:function(A)
{
  if (this.titleTextEl && !this.config.title)
  {
    this.titleTextEl.innerHTML = (typeof A != "undefined" && A.length > 0 ? A : "&#160;")
  }
},setActivePanel:function(A)
{
  A = this.getPanel(A);
  if (this.activePanel && this.activePanel != A)
  {
    this.activePanel.setActiveState(false)
  }
  this.activePanel = A;
  A.setActiveState(true);
  if (this.panelSize)
  {
    A.setSize(this.panelSize.width, this.panelSize.height)
  }
  if (this.closeBtn)
  {
    this.closeBtn.setVisible(!this.config.closeOnTab && !this.isSlid && A.isClosable())
  }
  this.updateTitle(A.getTitle());
  if (this.tabs)
  {
    this.fireEvent("invalidated", this)
  }
  this.fireEvent("panelactivated", this, A)
},showPanel:function(A)
{
  if (A = this.getPanel(A))
  {
    if (this.tabs)
    {
      var B = this.tabs.getTab(A.getEl().id);
      if (B.isHidden())
      {
        this.tabs.unhideTab(B.id)
      }
      B.activate()
    } else
    {
      this.setActivePanel(A)
    }
  }
  return A
},getActivePanel:function()
{
  return this.activePanel
},validateVisibility:function()
{
  if (this.panels.getCount() < 1)
  {
    this.updateTitle("&#160;");
    this.closeBtn.hide();
    this.hide()
  } else
  {
    if (!this.isVisible())
    {
      this.show()
    }
  }
},add:function(B)
{
  if (arguments.length > 1)
  {
    for (var C = 0,A = arguments.length; C < A; C++)
    {
      this.add(arguments[C])
    }
    return null
  }
  if (this.hasPanel(B))
  {
    this.showPanel(B);
    return B
  }
  B.setRegion(this);
  this.panels.add(B);
  if (this.panels.getCount() == 1 && !this.config.alwaysShowTabs)
  {
    this.bodyEl.dom.appendChild(B.getEl().dom);
    if (B.background !== true)
    {
      this.setActivePanel(B)
    }
    this.fireEvent("paneladded", this, B);
    return B
  }
  if (!this.tabs)
  {
    this.initTabs()
  } else
  {
    this.initPanelAsTab(B)
  }
  if (B.background !== true)
  {
    this.tabs.activate(B.getEl().id)
  }
  this.fireEvent("paneladded", this, B);
  return B
},hidePanel:function(A)
{
  if (this.tabs && (A = this.getPanel(A)))
  {
    this.tabs.hideTab(A.getEl().id)
  }
},unhidePanel:function(A)
{
  if (this.tabs && (A = this.getPanel(A)))
  {
    this.tabs.unhideTab(A.getEl().id)
  }
},clearPanels:function()
{
  while (this.panels.getCount() > 0)
  {
    this.remove(this.panels.first())
  }
},remove:function(B, A)
{
  B = this.getPanel(B);
  if (!B)
  {
    return null
  }
  var E = {};
  this.fireEvent("beforeremove", this, B, E);
  if (E.cancel === true)
  {
    return null
  }
  A = (typeof A != "undefined" ? A : (this.config.preservePanels === true || B.preserve === true));
  var C = B.getId();
  this.panels.removeKey(C);
  if (A)
  {
    document.body.appendChild(B.getEl().dom)
  }
  if (this.tabs)
  {
    this.tabs.removeTab(B.getEl().id)
  } else
  {
    if (!A)
    {
      this.bodyEl.dom.removeChild(B.getEl().dom)
    }
  }
  if (this.panels.getCount() == 1 && this.tabs && !this.config.alwaysShowTabs)
  {
    var D = this.panels.first();
    var F = document.createElement("div");
    F.appendChild(D.getEl().dom);
    this.bodyEl.update("");
    this.bodyEl.dom.appendChild(D.getEl().dom);
    F = null;
    this.updateTitle(D.getTitle());
    this.tabs = null;
    this.bodyEl.setStyle("overflow", this.config.autoScroll ? "auto" : "hidden");
    this.setActivePanel(D)
  }
  B.setRegion(null);
  if (this.activePanel == B)
  {
    this.activePanel = null
  }
  if (this.config.autoDestroy !== false && A !== true)
  {
    try
    {
      B.destroy()
    } catch(E)
    {
    }
  }
  this.fireEvent("panelremoved", this, B);
  return B
},getTabs:function()
{
  return this.tabs
},createTool:function(C, B)
{
  var A = Ext.DomHelper.append(C, {tag:"div",cls:"x-layout-tools-button",children:[{tag:"div",cls:"x-layout-tools-button-inner " + B,html:"&#160;"}]}, true);
  A.addClassOnOver("x-layout-tools-button-over");
  return A
}});
Ext.SplitLayoutRegion = function(B, A, D, C)
{
  this.cursor = C;
  Ext.SplitLayoutRegion.superclass.constructor.call(this, B, A, D)
};
Ext.extend(Ext.SplitLayoutRegion, Ext.LayoutRegion, {splitTip:"Drag to resize.",collapsibleSplitTip:"Drag to resize. Double click to hide.",useSplitTips:false,applyConfig:function(A)
{
  Ext.SplitLayoutRegion.superclass.applyConfig.call(this, A);
  if (A.split)
  {
    if (!this.split)
    {
      var B = Ext.DomHelper.append(this.mgr.el.dom, {tag:"div",id:this.el.id + "-split",cls:"x-layout-split x-layout-split-" + this.position,html:"&#160;"});
      this.split = new Ext.SplitBar(B, this.el, this.orientation);
      this.split.on("moved", this.onSplitMove, this);
      this.split.useShim = A.useShim === true;
      this.split.getMaximumSize = this[this.position == "north" || this.position == "south" ? "getVMaxSize" : "getHMaxSize"].createDelegate(this);
      if (this.useSplitTips)
      {
        this.split.el.dom.title = A.collapsible ? this.collapsibleSplitTip : this.splitTip
      }
      if (A.collapsible)
      {
        this.split.el.on("dblclick", this.collapse, this)
      }
    }
    if (typeof A.minSize != "undefined")
    {
      this.split.minSize = A.minSize
    }
    if (typeof A.maxSize != "undefined")
    {
      this.split.maxSize = A.maxSize
    }
    if (A.hideWhenEmpty || A.hidden || A.collapsed)
    {
      this.hideSplitter()
    }
  }
},getHMaxSize:function()
{
  var B = this.config.maxSize || 10000;
  var A = this.mgr.getRegion("center");
  return Math.min(B, (this.el.getWidth() + A.getEl().getWidth()) - A.getMinWidth())
},getVMaxSize:function()
{
  var B = this.config.maxSize || 10000;
  var A = this.mgr.getRegion("center");
  return Math.min(B, (this.el.getHeight() + A.getEl().getHeight()) - A.getMinHeight())
},onSplitMove:function(B, A)
{
  this.fireEvent("resized", this, A)
},getSplitBar:function()
{
  return this.split
},hide:function()
{
  this.hideSplitter();
  Ext.SplitLayoutRegion.superclass.hide.call(this)
},hideSplitter:function()
{
  if (this.split)
  {
    this.split.el.setLocation(-2000, -2000);
    this.split.el.hide()
  }
},show:function()
{
  if (this.split)
  {
    this.split.el.show()
  }
  Ext.SplitLayoutRegion.superclass.show.call(this)
},beforeSlide:function()
{
  if (Ext.isGecko)
  {
    this.bodyEl.clip();
    if (this.tabs)
    {
      this.tabs.bodyEl.clip()
    }
    if (this.activePanel)
    {
      this.activePanel.getEl().clip();
      if (this.activePanel.beforeSlide)
      {
        this.activePanel.beforeSlide()
      }
    }
  }
},afterSlide:function()
{
  if (Ext.isGecko)
  {
    this.bodyEl.unclip();
    if (this.tabs)
    {
      this.tabs.bodyEl.unclip()
    }
    if (this.activePanel)
    {
      this.activePanel.getEl().unclip();
      if (this.activePanel.afterSlide)
      {
        this.activePanel.afterSlide()
      }
    }
  }
},initAutoHide:function()
{
  if (this.autoHide !== false)
  {
    if (!this.autoHideHd)
    {
      var A = new Ext.util.DelayedTask(this.slideIn, this);
      this.autoHideHd = {"mouseout":function(B)
      {
        if (!B.within(this.el, true))
        {
          A.delay(500)
        }
      },"mouseover":function(B)
      {
        A.cancel()
      },scope:this}
    }
    this.el.on(this.autoHideHd)
  }
},clearAutoHide:function()
{
  if (this.autoHide !== false)
  {
    this.el.un("mouseout", this.autoHideHd.mouseout);
    this.el.un("mouseover", this.autoHideHd.mouseover)
  }
},clearMonitor:function()
{
  Ext.get(document).un("click", this.slideInIf, this)
},slideOut:function()
{
  if (this.isSlid || this.el.hasActiveFx())
  {
    return
  }
  this.isSlid = true;
  if (this.collapseBtn)
  {
    this.collapseBtn.hide()
  }
  this.closeBtnState = this.closeBtn.getStyle("display");
  this.closeBtn.hide();
  if (this.stickBtn)
  {
    this.stickBtn.show()
  }
  this.el.show();
  this.el.alignTo(this.collapsedEl, this.getCollapseAnchor());
  this.beforeSlide();
  this.el.setStyle("z-index", 10001);
  this.el.slideIn(this.getSlideAnchor(), {callback:function()
  {
    this.afterSlide();
    this.initAutoHide();
    Ext.get(document).on("click", this.slideInIf, this);
    this.fireEvent("slideshow", this)
  },scope:this,block:true})
},afterSlideIn:function()
{
  this.clearAutoHide();
  this.isSlid = false;
  this.clearMonitor();
  this.el.setStyle("z-index", "");
  if (this.collapseBtn)
  {
    this.collapseBtn.show()
  }
  this.closeBtn.setStyle("display", this.closeBtnState);
  if (this.stickBtn)
  {
    this.stickBtn.hide()
  }
  this.fireEvent("slidehide", this)
},slideIn:function(A)
{
  if (!this.isSlid || this.el.hasActiveFx())
  {
    Ext.callback(A);
    return
  }
  this.isSlid = false;
  this.beforeSlide();
  this.el.slideOut(this.getSlideAnchor(), {callback:function()
  {
    this.el.setLeftTop(-10000, -10000);
    this.afterSlide();
    this.afterSlideIn();
    Ext.callback(A)
  },scope:this,block:true})
},slideInIf:function(A)
{
  if (!A.within(this.el))
  {
    this.slideIn()
  }
},animateCollapse:function()
{
  this.beforeSlide();
  this.el.setStyle("z-index", 20000);
  var A = this.getSlideAnchor();
  this.el.slideOut(A, {callback:function()
  {
    this.el.setStyle("z-index", "");
    this.collapsedEl.slideIn(A, {duration:0.3});
    this.afterSlide();
    this.el.setLocation(-10000, -10000);
    this.el.hide();
    this.fireEvent("collapsed", this)
  },scope:this,block:true})
},animateExpand:function()
{
  this.beforeSlide();
  this.el.alignTo(this.collapsedEl, this.getCollapseAnchor(), this.getExpandAdj());
  this.el.setStyle("z-index", 20000);
  this.collapsedEl.hide({duration:0.1});
  this.el.slideIn(this.getSlideAnchor(), {callback:function()
  {
    this.el.setStyle("z-index", "");
    this.afterSlide();
    if (this.split)
    {
      this.split.el.show()
    }
    this.fireEvent("invalidated", this);
    this.fireEvent("expanded", this)
  },scope:this,block:true})
},anchors:{"west":"left","east":"right","north":"top","south":"bottom"},sanchors:{"west":"l","east":"r","north":"t","south":"b"},canchors:{"west":"tl-tr","east":"tr-tl","north":"tl-bl","south":"bl-tl"},getAnchor:function()
{
  return this.anchors[this.position]
},getCollapseAnchor:function()
{
  return this.canchors[this.position]
},getSlideAnchor:function()
{
  return this.sanchors[this.position]
},getAlignAdj:function()
{
  var A = this.cmargins;
  switch (this.position)
      {case"west":return[0,0];break;case"east":return[0,0];break;case"north":return[0,0];break;case"south":return[0,0];break}
},getExpandAdj:function()
{
  var B = this.collapsedEl,A = this.cmargins;
  switch (this.position)
      {case"west":return[-(A.right + B.getWidth() + A.left),0];break;case"east":return[A.right + B.getWidth() + A.left,0];break;case"north":return[0,-(A.top + A.bottom + B.getHeight())];break;case"south":return[0,A.top + A.bottom + B.getHeight()];break}
}});
Ext.CenterLayoutRegion = function(B, A)
{
  Ext.CenterLayoutRegion.superclass.constructor.call(this, B, A, "center");
  this.visible = true;
  this.minWidth = A.minWidth || 20;
  this.minHeight = A.minHeight || 20
};
Ext.extend(Ext.CenterLayoutRegion, Ext.LayoutRegion, {hide:function()
{
},show:function()
{
},getMinWidth:function()
{
  return this.minWidth
},getMinHeight:function()
{
  return this.minHeight
}});
Ext.NorthLayoutRegion = function(C, A)
{
  Ext.NorthLayoutRegion.superclass.constructor.call(this, C, A, "north", "n-resize");
  if (this.split)
  {
    this.split.placement = Ext.SplitBar.TOP;
    this.split.orientation = Ext.SplitBar.VERTICAL;
    this.split.el.addClass("x-layout-split-v")
  }
  var B = A.initialSize || A.height;
  if (typeof B != "undefined")
  {
    this.el.setHeight(B)
  }
};
Ext.extend(Ext.NorthLayoutRegion, Ext.SplitLayoutRegion, {orientation:Ext.SplitBar.VERTICAL,getBox:function()
{
  if (this.collapsed)
  {
    return this.collapsedEl.getBox()
  }
  var A = this.el.getBox();
  if (this.split)
  {
    A.height += this.split.el.getHeight()
  }
  return A
},updateBox:function(A)
{
  if (this.split && !this.collapsed)
  {
    A.height -= this.split.el.getHeight();
    this.split.el.setLeft(A.x);
    this.split.el.setTop(A.y + A.height);
    this.split.el.setWidth(A.width)
  }
  if (this.collapsed)
  {
    this.updateBody(A.width, null)
  }
  Ext.NorthLayoutRegion.superclass.updateBox.call(this, A)
}});
Ext.SouthLayoutRegion = function(C, A)
{
  Ext.SouthLayoutRegion.superclass.constructor.call(this, C, A, "south", "s-resize");
  if (this.split)
  {
    this.split.placement = Ext.SplitBar.BOTTOM;
    this.split.orientation = Ext.SplitBar.VERTICAL;
    this.split.el.addClass("x-layout-split-v")
  }
  var B = A.initialSize || A.height;
  if (typeof B != "undefined")
  {
    this.el.setHeight(B)
  }
};
Ext.extend(Ext.SouthLayoutRegion, Ext.SplitLayoutRegion, {orientation:Ext.SplitBar.VERTICAL,getBox:function()
{
  if (this.collapsed)
  {
    return this.collapsedEl.getBox()
  }
  var B = this.el.getBox();
  if (this.split)
  {
    var A = this.split.el.getHeight();
    B.height += A;
    B.y -= A
  }
  return B
},updateBox:function(B)
{
  if (this.split && !this.collapsed)
  {
    var A = this.split.el.getHeight();
    B.height -= A;
    B.y += A;
    this.split.el.setLeft(B.x);
    this.split.el.setTop(B.y - A);
    this.split.el.setWidth(B.width)
  }
  if (this.collapsed)
  {
    this.updateBody(B.width, null)
  }
  Ext.SouthLayoutRegion.superclass.updateBox.call(this, B)
}});
Ext.EastLayoutRegion = function(C, A)
{
  Ext.EastLayoutRegion.superclass.constructor.call(this, C, A, "east", "e-resize");
  if (this.split)
  {
    this.split.placement = Ext.SplitBar.RIGHT;
    this.split.orientation = Ext.SplitBar.HORIZONTAL;
    this.split.el.addClass("x-layout-split-h")
  }
  var B = A.initialSize || A.width;
  if (typeof B != "undefined")
  {
    this.el.setWidth(B)
  }
};
Ext.extend(Ext.EastLayoutRegion, Ext.SplitLayoutRegion, {orientation:Ext.SplitBar.HORIZONTAL,getBox:function()
{
  if (this.collapsed)
  {
    return this.collapsedEl.getBox()
  }
  var B = this.el.getBox();
  if (this.split)
  {
    var A = this.split.el.getWidth();
    B.width += A;
    B.x -= A
  }
  return B
},updateBox:function(B)
{
  if (this.split && !this.collapsed)
  {
    var A = this.split.el.getWidth();
    B.width -= A;
    this.split.el.setLeft(B.x);
    this.split.el.setTop(B.y);
    this.split.el.setHeight(B.height);
    B.x += A
  }
  if (this.collapsed)
  {
    this.updateBody(null, B.height)
  }
  Ext.EastLayoutRegion.superclass.updateBox.call(this, B)
}});
Ext.WestLayoutRegion = function(C, A)
{
  Ext.WestLayoutRegion.superclass.constructor.call(this, C, A, "west", "w-resize");
  if (this.split)
  {
    this.split.placement = Ext.SplitBar.LEFT;
    this.split.orientation = Ext.SplitBar.HORIZONTAL;
    this.split.el.addClass("x-layout-split-h")
  }
  var B = A.initialSize || A.width;
  if (typeof B != "undefined")
  {
    this.el.setWidth(B)
  }
};
Ext.extend(Ext.WestLayoutRegion, Ext.SplitLayoutRegion, {orientation:Ext.SplitBar.HORIZONTAL,getBox:function()
{
  if (this.collapsed)
  {
    return this.collapsedEl.getBox()
  }
  var A = this.el.getBox();
  if (this.split)
  {
    A.width += this.split.el.getWidth()
  }
  return A
},updateBox:function(B)
{
  if (this.split && !this.collapsed)
  {
    var A = this.split.el.getWidth();
    B.width -= A;
    this.split.el.setLeft(B.x + B.width);
    this.split.el.setTop(B.y);
    this.split.el.setHeight(B.height)
  }
  if (this.collapsed)
  {
    this.updateBody(null, B.height)
  }
  Ext.WestLayoutRegion.superclass.updateBox.call(this, B)
}});
Ext.LayoutStateManager = function(A)
{
  this.state = {north:{},south:{},east:{},west:{}}
};
Ext.LayoutStateManager.prototype = {init:function(D, G)
{
  this.provider = G;
  var F = G.get(D.id + "-layout-state");
  if (F)
  {
    var E = D.isUpdating();
    if (!E)
    {
      D.beginUpdate()
    }
    for (var A in F)
    {
      if (typeof F[A] != "function")
      {
        var B = F[A];
        var C = D.getRegion(A);
        if (C && B)
        {
          if (B.size)
          {
            C.resizeTo(B.size)
          }
          if (B.collapsed == true)
          {
            C.collapse(true)
          } else
          {
            C.expand(null, true)
          }
        }
      }
    }
    if (!E)
    {
      D.endUpdate()
    }
    this.state = F
  }
  this.layout = D;
  D.on("regionresized", this.onRegionResized, this);
  D.on("regioncollapsed", this.onRegionCollapsed, this);
  D.on("regionexpanded", this.onRegionExpanded, this)
},storeState:function()
{
  this.provider.set(this.layout.id + "-layout-state", this.state)
},onRegionResized:function(B, A)
{
  this.state[B.getPosition()].size = A;
  this.storeState()
},onRegionCollapsed:function(A)
{
  this.state[A.getPosition()].collapsed = true;
  this.storeState()
},onRegionExpanded:function(A)
{
  this.state[A.getPosition()].collapsed = false;
  this.storeState()
}};
Ext.ContentPanel = function(B, A, C)
{
  if (B.autoCreate)
  {
    A = B;
    B = Ext.id()
  }
  this.el = Ext.get(B);
  if (!this.el && A && A.autoCreate)
  {
    if (typeof A.autoCreate == "object")
    {
      if (!A.autoCreate.id)
      {
        A.autoCreate.id = A.id || B
      }
      this.el = Ext.DomHelper.append(document.body, A.autoCreate, true)
    } else
    {
      this.el = Ext.DomHelper.append(document.body, {tag:"div",cls:"x-layout-inactive-content",id:A.id || B}, true)
    }
  }
  this.closable = false;
  this.loaded = false;
  this.active = false;
  if (typeof A == "string")
  {
    this.title = A
  } else
  {
    Ext.apply(this, A)
  }
  if (this.resizeEl)
  {
    this.resizeEl = Ext.get(this.resizeEl, true)
  } else
  {
    this.resizeEl = this.el
  }
  this.addEvents({"activate":true,"deactivate":true,"resize":true});
  if (this.autoScroll)
  {
    this.resizeEl.setStyle("overflow", "auto")
  }
  C = C || this.content;
  if (C)
  {
    this.setContent(C)
  }
  if (A && A.url)
  {
    this.setUrl(this.url, this.params, this.loadOnce)
  }
  Ext.ContentPanel.superclass.constructor.call(this)
};
Ext.extend(Ext.ContentPanel, Ext.util.Observable, {tabTip:"",setRegion:function(A)
{
  this.region = A;
  if (A)
  {
    this.el.replaceClass("x-layout-inactive-content", "x-layout-active-content")
  } else
  {
    this.el.replaceClass("x-layout-active-content", "x-layout-inactive-content")
  }
},getToolbar:function()
{
  return this.toolbar
},setActiveState:function(A)
{
  this.active = A;
  if (!A)
  {
    this.fireEvent("deactivate", this)
  } else
  {
    this.fireEvent("activate", this)
  }
},setContent:function(B, A)
{
  this.el.update(B, A)
},ignoreResize:function(A, B)
{
  if (this.lastSize && this.lastSize.width == A && this.lastSize.height == B)
  {
    return true
  } else
  {
    this.lastSize = {width:A,height:B};
    return false
  }
},getUpdateManager:function()
{
  return this.el.getUpdateManager()
},load:function()
{
  var A = this.el.getUpdateManager();
  A.update.apply(A, arguments);
  return this
},setUrl:function(A, C, B)
{
  if (this.refreshDelegate)
  {
    this.removeListener("activate", this.refreshDelegate)
  }
  this.refreshDelegate = this._handleRefresh.createDelegate(this, [A,C,B]);
  this.on("activate", this.refreshDelegate);
  return this.el.getUpdateManager()
},_handleRefresh:function(A, D, C)
{
  if (!C || !this.loaded)
  {
    var B = this.el.getUpdateManager();
    B.update(A, D, this._setLoaded.createDelegate(this))
  }
},_setLoaded:function()
{
  this.loaded = true
},getId:function()
{
  return this.el.id
},getEl:function()
{
  return this.el
},adjustForComponents:function(B, A)
{
  if (this.resizeEl != this.el)
  {
    B -= this.el.getFrameWidth("lr");
    A -= this.el.getFrameWidth("tb")
  }
  if (this.toolbar)
  {
    var C = this.toolbar.getEl();
    A -= C.getHeight();
    C.setWidth(B)
  }
  if (this.adjustments)
  {
    B += this.adjustments[0];
    A += this.adjustments[1]
  }
  return{"width":B,"height":A}
},setSize:function(C, A)
{
  if (this.fitToFrame && !this.ignoreResize(C, A))
  {
    if (this.fitContainer && this.resizeEl != this.el)
    {
      this.el.setSize(C, A)
    }
    var B = this.adjustForComponents(C, A);
    this.resizeEl.setSize(this.autoWidth ? "auto" : B.width, this.autoHeight ? "auto" : B.height);
    this.fireEvent("resize", this, B.width, B.height)
  }
},getTitle:function()
{
  return this.title
},setTitle:function(A)
{
  this.title = A;
  if (this.region)
  {
    this.region.updatePanelTitle(this, A)
  }
},isClosable:function()
{
  return this.closable
},beforeSlide:function()
{
  this.el.clip();
  this.resizeEl.clip()
},afterSlide:function()
{
  this.el.unclip();
  this.resizeEl.unclip()
},refresh:function()
{
  if (this.refreshDelegate)
  {
    this.loaded = false;
    this.refreshDelegate()
  }
},destroy:function()
{
  this.el.removeAllListeners();
  var A = document.createElement("span");
  A.appendChild(this.el.dom);
  A.innerHTML = "";
  this.el.remove();
  this.el = null
}});
Ext.GridPanel = function(B, A)
{
  this.wrapper = Ext.DomHelper.append(document.body, {tag:"div",cls:"x-layout-grid-wrapper x-layout-inactive-content"}, true);
  this.wrapper.dom.appendChild(B.getGridEl().dom);
  Ext.GridPanel.superclass.constructor.call(this, this.wrapper, A);
  if (this.toolbar)
  {
    this.toolbar.el.insertBefore(this.wrapper.dom.firstChild)
  }
  B.monitorWindowResize = false;
  B.autoHeight = false;
  B.autoWidth = false;
  this.grid = B;
  this.grid.getGridEl().replaceClass("x-layout-inactive-content", "x-layout-component-panel")
};
Ext.extend(Ext.GridPanel, Ext.ContentPanel, {getId:function()
{
  return this.grid.id
},getGrid:function()
{
  return this.grid
},setSize:function(D, A)
{
  if (!this.ignoreResize(D, A))
  {
    var C = this.grid;
    var B = this.adjustForComponents(D, A);
    C.getGridEl().setSize(B.width, B.height);
    C.autoSize()
  }
},beforeSlide:function()
{
  this.grid.getView().scroller.clip()
},afterSlide:function()
{
  this.grid.getView().scroller.unclip()
},destroy:function()
{
  this.grid.destroy();
  delete this.grid;
  Ext.GridPanel.superclass.destroy.call(this)
}});
Ext.NestedLayoutPanel = function(B, A)
{
  Ext.NestedLayoutPanel.superclass.constructor.call(this, B.getEl(), A);
  B.monitorWindowResize = false;
  this.layout = B;
  this.layout.getEl().addClass("x-layout-nested-layout")
};
Ext.extend(Ext.NestedLayoutPanel, Ext.ContentPanel, {setSize:function(D, A)
{
  if (!this.ignoreResize(D, A))
  {
    var B = this.adjustForComponents(D, A);
    var C = this.layout.getEl();
    C.setSize(B.width, B.height);
    var E = C.dom.offsetWidth;
    this.layout.layout();
    if (Ext.isIE && !this.initialized)
    {
      this.initialized = true;
      this.layout.layout()
    }
  }
},getLayout:function()
{
  return this.layout
}});
Ext.ScrollPanel = function(D, B, E)
{
  B = B || {};
  B.fitToFrame = true;
  Ext.ScrollPanel.superclass.constructor.call(this, D, B, E);
  this.el.dom.style.overflow = "hidden";
  var C = this.el.wrap({cls:"x-scroller x-layout-inactive-content"});
  this.el.removeClass("x-layout-inactive-content");
  this.el.on("mousewheel", this.onWheel, this);
  var A = C.createChild({cls:"x-scroller-up",html:"&#160;"}, this.el.dom);
  var F = C.createChild({cls:"x-scroller-down",html:"&#160;"});
  A.unselectable();
  F.unselectable();
  A.on("click", this.scrollUp, this);
  F.on("click", this.scrollDown, this);
  A.addClassOnOver("x-scroller-btn-over");
  F.addClassOnOver("x-scroller-btn-over");
  A.addClassOnClick("x-scroller-btn-click");
  F.addClassOnClick("x-scroller-btn-click");
  this.adjustments = [0,-(A.getHeight() + F.getHeight())];
  this.resizeEl = this.el;
  this.el = C;
  this.up = A;
  this.down = F
};
Ext.extend(Ext.ScrollPanel, Ext.ContentPanel, {increment:100,wheelIncrement:5,scrollUp:function()
{
  this.resizeEl.scroll("up", this.increment, {callback:this.afterScroll,scope:this})
},scrollDown:function()
{
  this.resizeEl.scroll("down", this.increment, {callback:this.afterScroll,scope:this})
},afterScroll:function()
{
  var D = this.resizeEl;
  var A = D.dom.scrollTop,C = D.dom.scrollHeight,B = D.dom.clientHeight;
  this.up[A == 0 ? "addClass" : "removeClass"]("x-scroller-btn-disabled");
  this.down[C - A <= B ? "addClass" : "removeClass"]("x-scroller-btn-disabled")
},setSize:function()
{
  Ext.ScrollPanel.superclass.setSize.apply(this, arguments);
  this.afterScroll()
},onWheel:function(A)
{
  var B = A.getWheelDelta();
  this.resizeEl.dom.scrollTop -= (B * this.wheelIncrement);
  this.afterScroll();
  A.stopEvent()
},setContent:function(B, A)
{
  this.resizeEl.update(B, A)
}});
Ext.ReaderLayout = function(B, C)
{
  var D = B || {size:{}};
  Ext.ReaderLayout.superclass.constructor.call(this, C || document.body, {north:D.north !== false ? Ext.apply({split:false,initialSize:32,titlebar:false}, D.north) : false,west:D.west !== false ? Ext.apply({split:true,initialSize:200,minSize:175,maxSize:400,titlebar:true,collapsible:true,animate:true,margins:{left:5,right:0,bottom:5,top:5},cmargins:{left:5,right:5,bottom:5,top:5}}, D.west) : false,east:D.east !== false ? Ext.apply({split:true,initialSize:200,minSize:175,maxSize:400,titlebar:true,collapsible:true,animate:true,margins:{left:0,right:5,bottom:5,top:5},cmargins:{left:5,right:5,bottom:5,top:5}}, D.east) : false,center:Ext.apply({tabPosition:"top",autoScroll:false,closeOnTab:true,titlebar:false,margins:{left:D.west !== false ? 0 : 5,right:D.east !== false ? 0 : 5,bottom:5,top:2}}, D.center)});
  this.el.addClass("x-reader");
  this.beginUpdate();
  var A = new Ext.BorderLayout(Ext.get(document.body).createChild(), {south:D.preview !== false ? Ext.apply({split:true,initialSize:200,minSize:100,autoScroll:true,collapsible:true,titlebar:true,cmargins:{top:5,left:0,right:0,bottom:0}}, D.preview) : false,center:Ext.apply({autoScroll:false,titlebar:false,minHeight:200}, D.listView)});
  this.add("center", new Ext.NestedLayoutPanel(A, Ext.apply({title:D.mainTitle || "",tabTip:""}, D.innerPanelCfg)));
  this.endUpdate();
  this.regions.preview = A.getRegion("south");
  this.regions.listView = A.getRegion("center")
};
Ext.extend(Ext.ReaderLayout, Ext.BorderLayout);
Ext.grid.Grid = function(A, B)
{
  this.container = Ext.get(A);
  this.container.update("");
  this.container.setStyle("overflow", "hidden");
  this.container.addClass("x-grid-container");
  this.id = this.container.id;
  Ext.apply(this, B);
  if (this.ds)
  {
    this.dataSource = this.ds;
    delete this.ds
  }
  if (this.cm)
  {
    this.colModel = this.cm;
    delete this.cm
  }
  if (this.sm)
  {
    this.selModel = this.sm;
    delete this.sm
  }
  if (this.width)
  {
    this.container.setWidth(this.width)
  }
  if (this.height)
  {
    this.container.setHeight(this.height)
  }
  this.addEvents({"click":true,"dblclick":true,"contextmenu":true,"mousedown":true,"mouseup":true,"mouseover":true,"mouseout":true,"keypress":true,"keydown":true,"cellclick":true,"celldblclick":true,"rowclick":true,"rowdblclick":true,"headerclick":true,"headerdblclick":true,"rowcontextmenu":true,"cellcontextmenu":true,"headercontextmenu":true,"bodyscroll":true,"columnresize":true,"columnmove":true,"startdrag":true,"enddrag":true,"dragdrop":true,"dragover":true,"dragenter":true,"dragout":true,render:true});
  Ext.grid.Grid.superclass.constructor.call(this)
};
Ext.extend(Ext.grid.Grid, Ext.util.Observable, {minColumnWidth:25,autoSizeColumns:false,autoSizeHeaders:true,monitorWindowResize:true,maxRowsToMeasure:0,trackMouseOver:true,enableDragDrop:false,enableColumnMove:true,enableColumnHide:true,enableRowHeightSync:false,stripeRows:true,autoHeight:false,autoExpandColumn:false,autoExpandMin:50,autoExpandMax:1000,view:null,loadMask:false,rendered:false,render:function()
{
  var B = this.container;
  if ((!B.dom.offsetHeight || B.dom.offsetHeight < 20) || B.getStyle("height") == "auto")
  {
    this.autoHeight = true
  }
  var A = this.getView();
  A.init(this);
  B.on("click", this.onClick, this);
  B.on("dblclick", this.onDblClick, this);
  B.on("contextmenu", this.onContextMenu, this);
  B.on("keydown", this.onKeyDown, this);
  this.relayEvents(B, ["mousedown","mouseup","mouseover","mouseout","keypress"]);
  this.getSelectionModel().init(this);
  A.render();
  if (this.loadMask)
  {
    this.loadMask = new Ext.LoadMask(this.container, Ext.apply({store:this.dataSource}, this.loadMask))
  }
  this.rendered = true;
  this.fireEvent("render", this);
  return this
},reconfigure:function(B, A)
{
  if (this.loadMask)
  {
    this.loadMask.destroy();
    this.loadMask = new Ext.LoadMask(this.container, Ext.apply({store:B}, this.loadMask))
  }
  this.view.bind(B, A);
  this.dataSource = B;
  this.colModel = A;
  this.view.refresh(true)
},onKeyDown:function(A)
{
  this.fireEvent("keydown", A)
},destroy:function(A, B)
{
  if (this.loadMask)
  {
    this.loadMask.destroy()
  }
  var C = this.container;
  C.removeAllListeners();
  this.view.destroy();
  this.colModel.purgeListeners();
  if (!B)
  {
    this.purgeListeners()
  }
  C.update("");
  if (A === true)
  {
    C.remove()
  }
},processEvent:function(C, E)
{
  this.fireEvent(C, E);
  var D = E.getTarget();
  var B = this.view;
  var G = B.findHeaderIndex(D);
  if (G !== false)
  {
    this.fireEvent("header" + C, this, G, E)
  } else
  {
    var F = B.findRowIndex(D);
    var A = B.findCellIndex(D);
    if (F !== false)
    {
      this.fireEvent("row" + C, this, F, E);
      if (A !== false)
      {
        this.fireEvent("cell" + C, this, F, A, E)
      }
    }
  }
},onClick:function(A)
{
  this.processEvent("click", A)
},onContextMenu:function(B, A)
{
  this.processEvent("contextmenu", B)
},onDblClick:function(A)
{
  this.processEvent("dblclick", A)
},walkCells:function(J, C, B, E, I)
{
  var H = this.colModel,F = H.getColumnCount();
  var A = this.dataSource,G = A.getCount(),D = true;
  if (B < 0)
  {
    if (C < 0)
    {
      J--;
      D = false
    }
    while (J >= 0)
    {
      if (!D)
      {
        C = F - 1
      }
      D = false;
      while (C >= 0)
      {
        if (E.call(I || this, J, C, H) === true)
        {
          return[J,C]
        }
        C--
      }
      J--
    }
  } else
  {
    if (C >= F)
    {
      J++;
      D = false
    }
    while (J < G)
    {
      if (!D)
      {
        C = 0
      }
      D = false;
      while (C < F)
      {
        if (E.call(I || this, J, C, H) === true)
        {
          return[J,C]
        }
        C++
      }
      J++
    }
  }
  return null
},getSelections:function()
{
  return this.selModel.getSelections()
},autoSize:function()
{
  if (this.rendered)
  {
    this.view.layout();
    if (this.view.adjustForScroll)
    {
      this.view.adjustForScroll()
    }
  }
},getGridEl:function()
{
  return this.container
},stopEditing:function()
{
},getSelectionModel:function()
{
  if (!this.selModel)
  {
    this.selModel = new Ext.grid.RowSelectionModel()
  }
  return this.selModel
},getDataSource:function()
{
  return this.dataSource
},getColumnModel:function()
{
  return this.colModel
},getView:function()
{
  if (!this.view)
  {
    this.view = new Ext.grid.GridView(this.viewConfig)
  }
  return this.view
},getDragDropText:function()
{
  var A = this.selModel.getCount();
  return String.format(this.ddText, A, A == 1 ? "" : "s")
}});
Ext.grid.Grid.prototype.ddText = "{0} selected row{1}";
Ext.grid.AbstractGridView = function()
{
  this.grid = null;
  this.events = {"beforerowremoved":true,"beforerowsinserted":true,"beforerefresh":true,"rowremoved":true,"rowsinserted":true,"rowupdated":true,"refresh":true};
  Ext.grid.AbstractGridView.superclass.constructor.call(this)
};
Ext.extend(Ext.grid.AbstractGridView, Ext.util.Observable, {rowClass:"x-grid-row",cellClass:"x-grid-cell",tdClass:"x-grid-td",hdClass:"x-grid-hd",splitClass:"x-grid-hd-split",init:function(A)
{
  this.grid = A;
  var B = this.grid.getGridEl().id;
  this.colSelector = "#" + B + " ." + this.cellClass + "-";
  this.tdSelector = "#" + B + " ." + this.tdClass + "-";
  this.hdSelector = "#" + B + " ." + this.hdClass + "-";
  this.splitSelector = "#" + B + " ." + this.splitClass + "-"
},getColumnRenderers:function()
{
  var B = [];
  var A = this.grid.colModel;
  var D = A.getColumnCount();
  for (var C = 0; C < D; C++)
  {
    B[C] = A.getRenderer(C)
  }
  return B
},getColumnIds:function()
{
  var C = [];
  var A = this.grid.colModel;
  var D = A.getColumnCount();
  for (var B = 0; B < D; B++)
  {
    C[B] = A.getColumnId(B)
  }
  return C
},getDataIndexes:function()
{
  if (!this.indexMap)
  {
    this.indexMap = this.buildIndexMap()
  }
  return this.indexMap.colToData
},getColumnIndexByDataIndex:function(A)
{
  if (!this.indexMap)
  {
    this.indexMap = this.buildIndexMap()
  }
  return this.indexMap.dataToCol[A]
},setCSSStyle:function(C, B, D)
{
  var A = "#" + this.grid.id + " .x-grid-col-" + C;
  Ext.util.CSS.updateRule(A, B, D)
},generateRules:function(B)
{
  var C = [],E = this.grid.id + "-cssrules";
  Ext.util.CSS.removeStyleSheet(E);
  for (var D = 0,A = B.getColumnCount(); D < A; D++)
  {
    var F = B.getColumnId(D);
    C.push(this.colSelector, F, " {\n", B.config[D].css, "}\n", this.tdSelector, F, " {\n}\n", this.hdSelector, F, " {\n}\n", this.splitSelector, F, " {\n}\n")
  }
  return Ext.util.CSS.createStyleSheet(C.join(""), E)
}});
Ext.grid.GridView = function(A)
{
  Ext.grid.GridView.superclass.constructor.call(this);
  this.el = null;
  Ext.apply(this, A)
};
Ext.extend(Ext.grid.GridView, Ext.grid.AbstractGridView, {rowClass:"x-grid-row",cellClass:"x-grid-col",tdClass:"x-grid-td",hdClass:"x-grid-hd",splitClass:"x-grid-split",sortClasses:["sort-asc","sort-desc"],enableMoveAnim:false,hlColor:"C3DAF9",dh:Ext.DomHelper,fly:Ext.Element.fly,css:Ext.util.CSS,borderWidth:1,splitOffset:3,scrollIncrement:22,cellRE:/(?:.*?)x-grid-(?:hd|cell|csplit)-(?:[\d]+)-([\d]+)(?:.*?)/,findRE:/\s?(?:x-grid-hd|x-grid-col|x-grid-csplit)\s/,bind:function(B, A)
{
  if (this.ds)
  {
    this.ds.un("load", this.onLoad, this);
    this.ds.un("datachanged", this.onDataChange, this);
    this.ds.un("add", this.onAdd, this);
    this.ds.un("remove", this.onRemove, this);
    this.ds.un("update", this.onUpdate, this);
    this.ds.un("clear", this.onClear, this)
  }
  if (B)
  {
    B.on("load", this.onLoad, this);
    B.on("datachanged", this.onDataChange, this);
    B.on("add", this.onAdd, this);
    B.on("remove", this.onRemove, this);
    B.on("update", this.onUpdate, this);
    B.on("clear", this.onClear, this)
  }
  this.ds = B;
  if (this.cm)
  {
    this.cm.un("widthchange", this.onColWidthChange, this);
    this.cm.un("headerchange", this.onHeaderChange, this);
    this.cm.un("hiddenchange", this.onHiddenChange, this);
    this.cm.un("columnmoved", this.onColumnMove, this);
    this.cm.un("columnlockchange", this.onColumnLock, this)
  }
  if (A)
  {
    this.generateRules(A);
    A.on("widthchange", this.onColWidthChange, this);
    A.on("headerchange", this.onHeaderChange, this);
    A.on("hiddenchange", this.onHiddenChange, this);
    A.on("columnmoved", this.onColumnMove, this);
    A.on("columnlockchange", this.onColumnLock, this)
  }
  this.cm = A
},init:function(A)
{
  Ext.grid.GridView.superclass.init.call(this, A);
  this.bind(A.dataSource, A.colModel);
  A.on("headerclick", this.handleHeaderClick, this);
  if (A.trackMouseOver)
  {
    A.on("mouseover", this.onRowOver, this);
    A.on("mouseout", this.onRowOut, this)
  }
  A.cancelTextSelection = function()
  {
  };
  this.gridId = A.id;
  var B = this.templates || {};
  if (!B.master)
  {
    B.master = new Ext.Template("<div class=\"x-grid\" hidefocus=\"true\">", "<div class=\"x-grid-topbar\"></div>", "<div class=\"x-grid-scroller\"><div></div></div>", "<div class=\"x-grid-locked\">", "<div class=\"x-grid-header\">{lockedHeader}</div>", "<div class=\"x-grid-body\">{lockedBody}</div>", "</div>", "<div class=\"x-grid-viewport\">", "<div class=\"x-grid-header\">{header}</div>", "<div class=\"x-grid-body\">{body}</div>", "</div>", "<div class=\"x-grid-bottombar\"></div>", "<a href=\"#\" class=\"x-grid-focus\" tabIndex=\"-1\"></a>", "<div class=\"x-grid-resize-proxy\">&#160;</div>", "</div>");
    B.master.disableformats = true
  }
  if (!B.header)
  {
    B.header = new Ext.Template("<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">", "<tbody><tr class=\"x-grid-hd-row\">{cells}</tr></tbody>", "</table>{splits}");
    B.header.disableformats = true
  }
  B.header.compile();
  if (!B.hcell)
  {
    B.hcell = new Ext.Template("<td class=\"x-grid-hd x-grid-td-{id} {cellId}\"><div title=\"{title}\" class=\"x-grid-hd-inner x-grid-hd-{id}\">", "<div class=\"x-grid-hd-text\" unselectable=\"on\">{value}<img class=\"x-grid-sort-icon\" src=\"", Ext.BLANK_IMAGE_URL, "\" /></div>", "</div></td>");
    B.hcell.disableFormats = true
  }
  B.hcell.compile();
  if (!B.hsplit)
  {
    B.hsplit = new Ext.Template("<div class=\"x-grid-split {splitId} x-grid-split-{id}\" style=\"{style}\" unselectable=\"on\">&#160;</div>");
    B.hsplit.disableFormats = true
  }
  B.hsplit.compile();
  if (!B.body)
  {
    B.body = new Ext.Template("<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">", "<tbody>{rows}</tbody>", "</table>");
    B.body.disableFormats = true
  }
  B.body.compile();
  if (!B.row)
  {
    B.row = new Ext.Template("<tr class=\"x-grid-row {alt}\">{cells}</tr>");
    B.row.disableFormats = true
  }
  B.row.compile();
  if (!B.cell)
  {
    B.cell = new Ext.Template("<td class=\"x-grid-col x-grid-td-{id} {cellId} {css}\" tabIndex=\"0\">", "<div class=\"x-grid-col-{id} x-grid-cell-inner\"><div class=\"x-grid-cell-text\" unselectable=\"on\" {attr}>{value}</div></div>", "</td>");
    B.cell.disableFormats = true
  }
  B.cell.compile();
  this.templates = B
},onColWidthChange:function()
{
  this.updateColumns.apply(this, arguments)
},onHeaderChange:function()
{
  this.updateHeaders.apply(this, arguments)
},onHiddenChange:function()
{
  this.handleHiddenChange.apply(this, arguments)
},onColumnMove:function()
{
  this.handleColumnMove.apply(this, arguments)
},onColumnLock:function()
{
  this.handleLockChange.apply(this, arguments)
},onDataChange:function()
{
  this.refresh();
  this.updateHeaderSortState()
},onClear:function()
{
  this.refresh()
},onUpdate:function(B, A)
{
  this.refreshRow(A)
},refreshRow:function(A)
{
  var C = this.ds,B;
  if (typeof A == "number")
  {
    B = A;
    A = C.getAt(B)
  } else
  {
    B = C.indexOf(A)
  }
  this.insertRows(C, B, B, true);
  this.onRemove(C, A, B + 1, true);
  this.syncRowHeights(B, B);
  this.layout();
  this.fireEvent("rowupdated", this, B, A)
},onAdd:function(C, A, B)
{
  this.insertRows(C, B, B + (A.length - 1))
},onRemove:function(F, B, D, E)
{
  if (E !== true)
  {
    this.fireEvent("beforerowremoved", this, D, B)
  }
  var C = this.getBodyTable(),A = this.getLockedTable();
  if (C.rows[D])
  {
    C.firstChild.removeChild(C.rows[D])
  }
  if (A.rows[D])
  {
    A.firstChild.removeChild(A.rows[D])
  }
  if (E !== true)
  {
    this.stripeRows(D);
    this.syncRowHeights(D, D);
    this.layout();
    this.fireEvent("rowremoved", this, D, B)
  }
},onLoad:function()
{
  this.scrollToTop()
},scrollToTop:function()
{
  if (this.scroller)
  {
    this.scroller.dom.scrollTop = 0;
    this.syncScroll()
  }
},getHeaderPanel:function(A)
{
  if (A)
  {
    this.headerPanel.show()
  }
  return this.headerPanel
},getFooterPanel:function(A)
{
  if (A)
  {
    this.footerPanel.show()
  }
  return this.footerPanel
},initElements:function()
{
  var C = Ext.Element;
  var B = this.grid.getGridEl().dom.firstChild;
  var A = B.childNodes;
  this.el = new C(B);
  this.headerPanel = new C(B.firstChild);
  this.headerPanel.enableDisplayMode("block");
  this.scroller = new C(A[1]);
  this.scrollSizer = new C(this.scroller.dom.firstChild);
  this.lockedWrap = new C(A[2]);
  this.lockedHd = new C(this.lockedWrap.dom.firstChild);
  this.lockedBody = new C(this.lockedWrap.dom.childNodes[1]);
  this.mainWrap = new C(A[3]);
  this.mainHd = new C(this.mainWrap.dom.firstChild);
  this.mainBody = new C(this.mainWrap.dom.childNodes[1]);
  this.footerPanel = new C(A[4]);
  this.footerPanel.enableDisplayMode("block");
  this.focusEl = new C(A[5]);
  this.focusEl.swallowEvent("click", true);
  this.resizeProxy = new C(A[6]);
  this.headerSelector = String.format("#{0} td.x-grid-hd, #{1} td.x-grid-hd", this.lockedHd.id, this.mainHd.id);
  this.splitterSelector = String.format("#{0} div.x-grid-split, #{1} div.x-grid-split", this.lockedHd.id, this.mainHd.id)
},getHeaderCell:function(A)
{
  return Ext.DomQuery.select(this.headerSelector)[A]
},getHeaderCellMeasure:function(A)
{
  return this.getHeaderCell(A).firstChild
},getHeaderCellText:function(A)
{
  return this.getHeaderCell(A).firstChild.firstChild
},getLockedTable:function()
{
  return this.lockedBody.dom.firstChild
},getBodyTable:function()
{
  return this.mainBody.dom.firstChild
},getLockedRow:function(A)
{
  return this.getLockedTable().rows[A]
},getRow:function(A)
{
  return this.getBodyTable().rows[A]
},getRowComposite:function(B)
{
  if (!this.rowEl)
  {
    this.rowEl = new Ext.CompositeElementLite()
  }
  var D = [],C,A;
  if (C = this.getLockedRow(B))
  {
    D.push(C)
  }
  if (A = this.getRow(B))
  {
    D.push(A)
  }
  this.rowEl.elements = D;
  return this.rowEl
},getCell:function(D, B)
{
  var A = this.cm.getLockedCount();
  var C;
  if (B < A)
  {
    C = this.lockedBody.dom.firstChild
  } else
  {
    C = this.mainBody.dom.firstChild;
    B -= A
  }
  return C.rows[D].childNodes[B]
},getCellText:function(B, A)
{
  return this.getCell(B, A).firstChild.firstChild
},getCellBox:function(B)
{
  var A = this.fly(B).getBox();
  if (Ext.isOpera)
  {
    A.y = B.offsetTop + this.mainBody.getY()
  }
  return A
},getCellIndex:function(A)
{
  var B = String(A.className).match(this.cellRE);
  if (B)
  {
    return parseInt(B[1], 10)
  }
  return 0
},findHeaderIndex:function(B)
{
  var A = Ext.fly(B).findParent("td." + this.hdClass, 6);
  return A ? this.getCellIndex(A) : false
},findHeaderCell:function(B)
{
  var A = Ext.fly(B).findParent("td." + this.hdClass, 6);
  return A ? A : false
},findRowIndex:function(B)
{
  if (!B)
  {
    return false
  }
  var A = Ext.fly(B).findParent("tr." + this.rowClass, 6);
  return A ? A.rowIndex : false
},findCellIndex:function(B)
{
  var A = this.el.dom;
  while (B && B != A)
  {
    if (this.findRE.test(B.className))
    {
      return this.getCellIndex(B)
    }
    B = B.parentNode
  }
  return false
},getColumnId:function(A)
{
  return this.cm.getColumnId(A)
},getSplitters:function()
{
  if (this.splitterSelector)
  {
    return Ext.DomQuery.select(this.splitterSelector)
  } else
  {
    return null
  }
},getSplitter:function(A)
{
  return this.getSplitters()[A]
},onRowOver:function(B, A)
{
  var C;
  if ((C = this.findRowIndex(A)) !== false)
  {
    this.getRowComposite(C).addClass("x-grid-row-over")
  }
},onRowOut:function(B, A)
{
  var C;
  if ((C = this.findRowIndex(A)) !== false && C !== this.findRowIndex(B.getRelatedTarget()))
  {
    this.getRowComposite(C).removeClass("x-grid-row-over")
  }
},renderHeaders:function()
{
  var J = this.cm;
  var F = this.templates.hcell,I = this.templates.header,K = this.templates.hsplit;
  var D = [],B = [],H = [],C = [],A = {};
  for (var E = 0,G = J.getColumnCount(); E < G; E++)
  {
    A.cellId = "x-grid-hd-0-" + E;
    A.splitId = "x-grid-csplit-0-" + E;
    A.id = J.getColumnId(E);
    A.title = J.getColumnTooltip(E) || "";
    A.value = J.getColumnHeader(E) || "";
    A.style = (this.grid.enableColumnResize === false || !J.isResizable(E) || J.isFixed(E)) ? "cursor:default" : "";
    if (!J.isLocked(E))
    {
      D[D.length] = F.apply(A);
      H[H.length] = K.apply(A)
    } else
    {
      B[B.length] = F.apply(A);
      C[C.length] = K.apply(A)
    }
  }
  return[I.apply({cells:B.join(""),splits:C.join("")}),I.apply({cells:D.join(""),splits:H.join("")})]
},updateHeaders:function()
{
  var A = this.renderHeaders();
  this.lockedHd.update(A[0]);
  this.mainHd.update(A[1])
},focusRow:function(B)
{
  var A = this.scroller.dom.scrollLeft;
  this.focusCell(B, 0, false);
  this.scroller.dom.scrollLeft = A
},focusCell:function(D, A, C)
{
  var B = this.ensureVisible(D, A, C);
  this.focusEl.alignTo(B, "tl-tl");
  if (Ext.isGecko)
  {
    this.focusEl.focus()
  } else
  {
    this.focusEl.focus.defer(1, this.focusEl)
  }
},ensureVisible:function(O, E, D)
{
  if (typeof O != "number")
  {
    O = O.rowIndex
  }
  if (O < 0 && O >= this.ds.getCount())
  {
    return
  }
  E = (E !== undefined ? E : 0);
  var M = this.grid.colModel;
  while (M.isHidden(E))
  {
    E++
  }
  var C = this.getCell(O, E);
  if (!C)
  {
    return
  }
  var J = this.scroller.dom;
  var N = parseInt(C.offsetTop, 10);
  var I = parseInt(C.offsetLeft, 10);
  var L = N + C.offsetHeight;
  var G = I + C.offsetWidth;
  var A = J.clientHeight - this.mainHd.dom.offsetHeight;
  var K = parseInt(J.scrollTop, 10);
  var F = parseInt(J.scrollLeft, 10);
  var H = K + A;
  var B = F + J.clientWidth;
  if (N < K)
  {
    J.scrollTop = N
  } else
  {
    if (L > H)
    {
      J.scrollTop = L - A
    }
  }
  if (D !== false)
  {
    if (I < F)
    {
      J.scrollLeft = I
    } else
    {
      if (G > B)
      {
        J.scrollLeft = G - J.clientWidth
      }
    }
  }
  return C
},updateColumns:function()
{
  this.grid.stopEditing();
  var B = this.grid.colModel,E = this.getColumnIds();
  var F = 0;
  for (var D = 0,A = B.getColumnCount(); D < A; D++)
  {
    var C = B.getColumnWidth(D);
    this.css.updateRule(this.colSelector + E[D], "width", (C - this.borderWidth) + "px");
    this.css.updateRule(this.hdSelector + E[D], "width", (C - this.borderWidth) + "px")
  }
  this.updateSplitters()
},generateRules:function(I)
{
  var B = [],C = this.grid.id + "-cssrules";
  Ext.util.CSS.removeStyleSheet(C);
  for (var D = 0,F = I.getColumnCount(); D < F; D++)
  {
    var H = I.getColumnId(D);
    var G = "";
    if (I.config[D].align)
    {
      G = "text-align:" + I.config[D].align + ";"
    }
    var E = "";
    if (I.isHidden(D))
    {
      E = "display:none;"
    }
    var A = "width:" + (I.getColumnWidth(D) - this.borderWidth) + "px;";
    B.push(this.colSelector, H, " {\n", I.config[D].css, G, A, "\n}\n", this.hdSelector, H, " {\n", G, A, "}\n", this.tdSelector, H, " {\n", E, "\n}\n", this.splitSelector, H, " {\n", E, "\n}\n")
  }
  return Ext.util.CSS.createStyleSheet(B.join(""), C)
},updateSplitters:function()
{
  var B = this.cm,F = this.getSplitters();
  if (F)
  {
    var G = 0,D = true;
    for (var E = 0,A = B.getColumnCount(); E < A; E++)
    {
      if (B.isHidden(E))
      {
        continue
      }
      var C = B.getColumnWidth(E);
      if (!B.isLocked(E) && D)
      {
        G = 0;
        D = false
      }
      G += C;
      F[E].style.left = (G - this.splitOffset) + "px"
    }
  }
},handleHiddenChange:function(B, A, C)
{
  if (C)
  {
    this.hideColumn(A)
  } else
  {
    this.unhideColumn(A)
  }
},hideColumn:function(A)
{
  var B = this.getColumnId(A);
  this.css.updateRule(this.tdSelector + B, "display", "none");
  this.css.updateRule(this.splitSelector + B, "display", "none");
  if (Ext.isSafari)
  {
    this.updateHeaders()
  }
  this.updateSplitters();
  this.layout()
},unhideColumn:function(A)
{
  var B = this.getColumnId(A);
  this.css.updateRule(this.tdSelector + B, "display", "");
  this.css.updateRule(this.splitSelector + B, "display", "");
  if (Ext.isSafari)
  {
    this.updateHeaders()
  }
  this.updateSplitters();
  this.layout()
},insertRows:function(B, F, D, E)
{
  if (F == 0 && D == B.getCount() - 1)
  {
    this.refresh()
  } else
  {
    if (!E)
    {
      this.fireEvent("beforerowsinserted", this, F, D)
    }
    var C = this.getScrollState();
    var A = this.renderRows(F, D);
    this.bufferRows(A[0], this.getLockedTable(), F);
    this.bufferRows(A[1], this.getBodyTable(), F);
    this.restoreScroll(C);
    if (!E)
    {
      this.fireEvent("rowsinserted", this, F, D);
      this.syncRowHeights(F, D);
      this.stripeRows(F);
      this.layout()
    }
  }
},bufferRows:function(I, E, D)
{
  var G = null,H = E.rows,B = E.tBodies[0];
  if (D < H.length)
  {
    G = H[D]
  }
  var F = document.createElement("div");
  F.innerHTML = "<table><tbody>" + I + "</tbody></table>";
  var J = F.firstChild.rows;
  for (var A = 0,C = J.length; A < C; A++)
  {
    if (G)
    {
      B.insertBefore(J[0], G)
    } else
    {
      B.appendChild(J[0])
    }
  }
  F.innerHTML = "";
  F = null
},deleteRows:function(B, F, D)
{
  if (B.getRowCount() < 1)
  {
    this.fireEvent("beforerefresh", this);
    this.mainBody.update("");
    this.lockedBody.update("");
    this.fireEvent("refresh", this)
  } else
  {
    this.fireEvent("beforerowsdeleted", this, F, D);
    var A = this.getBodyTable();
    var C = A.firstChild;
    var E = A.rows;
    for (var G = F; G <= D; G++)
    {
      C.removeChild(E[F])
    }
    this.stripeRows(F);
    this.fireEvent("rowsdeleted", this, F, D)
  }
},updateRows:function(D, C, B)
{
  var A = this.getScrollState();
  this.refresh();
  this.restoreScroll(A)
},handleSort:function(D, C, A, B)
{
  if (!B)
  {
    this.refresh()
  }
  this.updateHeaderSortState()
},getScrollState:function()
{
  var A = this.scroller.dom;
  return{left:A.scrollLeft,top:A.scrollTop}
},stripeRows:function(F)
{
  if (!this.grid.stripeRows || this.ds.getCount() < 1)
  {
    return
  }
  F = F || 0;
  var J = this.getBodyTable().rows;
  var D = this.getLockedTable().rows;
  var G = " x-grid-row-alt ";
  for (var B = F,C = J.length; B < C; B++)
  {
    var I = J[B],E = D[B];
    var A = ((B + 1) % 2 == 0);
    var H = (" " + I.className + " ").indexOf(G) != -1;
    if (A == H)
    {
      continue
    }
    if (A)
    {
      I.className += " x-grid-row-alt"
    } else
    {
      I.className = I.className.replace("x-grid-row-alt", "")
    }
    if (E)
    {
      E.className = I.className
    }
  }
},restoreScroll:function(A)
{
  var B = this.scroller.dom;
  B.scrollLeft = A.left;
  B.scrollTop = A.top;
  this.syncScroll()
},syncScroll:function()
{
  var D = this.scroller.dom;
  var B = this.mainHd.dom;
  var A = this.mainBody.dom;
  var C = this.lockedBody.dom;
  B.scrollLeft = A.scrollLeft = D.scrollLeft;
  C.scrollTop = A.scrollTop = D.scrollTop
},handleScroll:function(A)
{
  this.syncScroll();
  var B = this.scroller.dom;
  this.grid.fireEvent("bodyscroll", B.scrollLeft, B.scrollTop);
  A.stopEvent()
},handleWheel:function(A)
{
  var B = A.getWheelDelta();
  this.scroller.dom.scrollTop -= B * 22;
  this.lockedBody.dom.scrollTop = this.mainBody.dom.scrollTop = this.scroller.dom.scrollTop;
  A.stopEvent()
},renderRows:function(J, D)
{
  var F = this.grid,H = F.colModel,B = F.dataSource,K = F.stripeRows;
  var I = H.getColumnCount();
  if (B.getCount() < 1)
  {
    return["",""]
  }
  var G = [];
  for (var E = 0; E < I; E++)
  {
    var A = H.getDataIndex(E);
    G[E] = {name:typeof A == "undefined" ? B.fields.get(E).name : A,renderer:H.getRenderer(E),id:H.getColumnId(E),locked:H.isLocked(E)}
  }
  J = J || 0;
  D = typeof D == "undefined" ? B.getCount() - 1 : D;
  var C = B.getRange(J, D);
  return this.doRender(G, C, B, J, I, K)
},doRender:Ext.isGecko ? function(D, G, L, A, K, P)
{
  var B = this.templates,C = B.cell,E = B.row;
  var T = "",W = "",M,F,U,N = {},H = {},J,I;
  for (var O = 0,R = G.length; O < R; O++)
  {
    J = G[O];
    M = "";
    F = "";
    I = (O + A);
    for (var Q = 0; Q < K; Q++)
    {
      U = D[Q];
      N.cellId = "x-grid-cell-" + I + "-" + Q;
      N.id = U.id;
      N.css = N.attr = "";
      N.value = U.renderer(J.data[U.name], N, J, I, Q, L);
      if (N.value == undefined || N.value === "")
      {
        N.value = "&#160;"
      }
      if (J.dirty && typeof J.modified[U.name] !== "undefined")
      {
        N.css += N.css ? " x-grid-dirty-cell" : "x-grid-dirty-cell"
      }
      var S = C.apply(N);
      if (!U.locked)
      {
        M += S
      } else
      {
        F += S
      }
    }
    var V = [];
    if (P && ((I + 1) % 2 == 0))
    {
      V[0] = "x-grid-row-alt"
    }
    if (J.dirty)
    {
      V[1] = " x-grid-dirty-row"
    }
    H.cells = F;
    if (this.getRowClass)
    {
      V[2] = this.getRowClass(J, I)
    }
    H.alt = V.join(" ");
    W += E.apply(H);
    H.cells = M;
    T += E.apply(H)
  }
  return[W,T]
} : function(D, G, L, A, K, P)
{
  var B = this.templates,C = B.cell,E = B.row;
  var T = [],W = [],M,F,U,N = {},H = {},J,I;
  for (var O = 0,R = G.length; O < R; O++)
  {
    J = G[O];
    M = [];
    F = [];
    I = (O + A);
    for (var Q = 0; Q < K; Q++)
    {
      U = D[Q];
      N.cellId = "x-grid-cell-" + I + "-" + Q;
      N.id = U.id;
      N.css = N.attr = "";
      N.value = U.renderer(J.data[U.name], N, J, I, Q, L);
      if (N.value == undefined || N.value === "")
      {
        N.value = "&#160;"
      }
      if (J.dirty && typeof J.modified[U.name] !== "undefined")
      {
        N.css += N.css ? " x-grid-dirty-cell" : "x-grid-dirty-cell"
      }
      var S = C.apply(N);
      if (!U.locked)
      {
        M[M.length] = S
      } else
      {
        F[F.length] = S
      }
    }
    var V = [];
    if (P && ((I + 1) % 2 == 0))
    {
      V[0] = "x-grid-row-alt"
    }
    if (J.dirty)
    {
      V[1] = " x-grid-dirty-row"
    }
    H.cells = F;
    if (this.getRowClass)
    {
      V[2] = this.getRowClass(J, I)
    }
    H.alt = V.join(" ");
    H.cells = F.join("");
    W[W.length] = E.apply(H);
    H.cells = M.join("");
    T[T.length] = E.apply(H)
  }
  return[W.join(""),T.join("")]
},renderBody:function()
{
  var B = this.renderRows();
  var A = this.templates.body;
  return[A.apply({rows:B[0]}),A.apply({rows:B[1]})]
},refresh:function(B)
{
  this.fireEvent("beforerefresh", this);
  this.grid.stopEditing();
  var A = this.renderBody();
  this.lockedBody.update(A[0]);
  this.mainBody.update(A[1]);
  if (B === true)
  {
    this.updateHeaders();
    this.updateColumns();
    this.updateSplitters();
    this.updateHeaderSortState()
  }
  this.syncRowHeights();
  this.layout();
  this.fireEvent("refresh", this)
},handleColumnMove:function(A, D, B)
{
  this.indexMap = null;
  var C = this.getScrollState();
  this.refresh(true);
  this.restoreScroll(C);
  this.afterMove(B)
},afterMove:function(A)
{
  if (this.enableMoveAnim && Ext.enableFx)
  {
    this.fly(this.getHeaderCell(A).firstChild).highlight(this.hlColor)
  }
},updateCell:function(C, E, F)
{
  var H = this.getColumnIndexByDataIndex(F);
  if (typeof H == "undefined")
  {
    return
  }
  var G = this.grid.colModel;
  var I = this.getCell(E, H);
  var J = this.getCellText(E, H);
  var A = {cellId:"x-grid-cell-" + E + "-" + H,id:G.getColumnId(H),css:H == G.getColumnCount() - 1 ? "x-grid-col-last" : ""};
  var D = G.getRenderer(H);
  var B = D(C.getValueAt(E, F), A, E, H, C);
  if (typeof B == "undefined" || B === "")
  {
    B = "&#160;"
  }
  J.innerHTML = B;
  I.className = this.cellClass + " " + A.cellId + " " + A.css;
  this.syncRowHeights(E, E)
},calcColumnWidth:function(I, A)
{
  var H = 0;
  if (this.grid.autoSizeHeaders)
  {
    var D = this.getHeaderCellMeasure(I);
    H = Math.max(H, D.scrollWidth)
  }
  var B,E;
  if (this.cm.isLocked(I))
  {
    B = this.getLockedTable();
    E = I
  } else
  {
    B = this.getBodyTable();
    E = I - this.cm.getLockedCount()
  }
  if (B && B.rows)
  {
    var J = B.rows;
    var F = Math.min(A || J.length, J.length);
    for (var C = 0; C < F; C++)
    {
      var G = J[C].childNodes[E].firstChild;
      H = Math.max(H, G.scrollWidth)
    }
  }
  return H + 5
},autoSizeColumn:function(C, A, B)
{
  if (this.cm.isHidden(C))
  {
    return
  }
  if (A)
  {
    var E = this.cm.getColumnId(C);
    this.css.updateRule(this.colSelector + E, "width", this.grid.minColumnWidth + "px");
    if (this.grid.autoSizeHeaders)
    {
      this.css.updateRule(this.hdSelector + E, "width", this.grid.minColumnWidth + "px")
    }
  }
  var D = this.calcColumnWidth(C);
  this.cm.setColumnWidth(C, Math.max(this.grid.minColumnWidth, D), B);
  if (!B)
  {
    this.grid.fireEvent("columnresize", C, D)
  }
},autoSizeColumns:function()
{
  var A = this.grid.colModel;
  var C = A.getColumnCount();
  for (var B = 0; B < C; B++)
  {
    this.autoSizeColumn(B, true, true)
  }
  if (A.getTotalWidth() < this.scroller.dom.clientWidth)
  {
    this.fitColumns()
  } else
  {
    this.updateColumns();
    this.layout()
  }
},fitColumns:function(C)
{
  var H = this.grid.colModel;
  var I = H.getColumnCount();
  var F = [];
  var B = 0;
  var D,G;
  for (D = 0; D < I; D++)
  {
    if (!H.isHidden(D) && !H.isFixed(D))
    {
      G = H.getColumnWidth(D);
      F.push(D);
      F.push(G);
      B += G
    }
  }
  var E = Math.min(this.scroller.dom.clientWidth, this.el.getWidth());
  if (C)
  {
    E -= 17
  }
  var A = (E - H.getTotalWidth()) / B;
  while (F.length)
  {
    G = F.pop();
    D = F.pop();
    H.setColumnWidth(D, Math.floor(G + G * A), true)
  }
  this.updateColumns();
  this.layout()
},onRowSelect:function(B)
{
  var A = this.getRowComposite(B);
  A.addClass("x-grid-row-selected")
},onRowDeselect:function(B)
{
  var A = this.getRowComposite(B);
  A.removeClass("x-grid-row-selected")
},onCellSelect:function(C, B)
{
  var A = this.getCell(C, B);
  if (A)
  {
    Ext.fly(A).addClass("x-grid-cell-selected")
  }
},onCellDeselect:function(C, B)
{
  var A = this.getCell(C, B);
  if (A)
  {
    Ext.fly(A).removeClass("x-grid-cell-selected")
  }
},updateHeaderSortState:function()
{
  var B = this.ds.getSortState();
  if (!B)
  {
    return
  }
  this.sortState = B;
  var E = this.cm.findColumnIndex(B.field);
  if (E != -1)
  {
    var A = B.direction;
    var D = this.sortClasses;
    var C = this.el.select(this.headerSelector).removeClass(D);
    C.item(E).addClass(D[A == "DESC" ? 1 : 0])
  }
},handleHeaderClick:function(D, C)
{
  if (this.headersDisabled)
  {
    return
  }
  var B = D.dataSource,A = D.colModel;
  if (!A.isSortable(C))
  {
    return
  }
  D.stopEditing();
  B.sort(A.getDataIndex(C))
},destroy:function()
{
  if (this.colMenu)
  {
    this.colMenu.removeAll();
    Ext.menu.MenuMgr.unregister(this.colMenu);
    this.colMenu.getEl().remove();
    delete this.colMenu
  }
  if (this.hmenu)
  {
    this.hmenu.removeAll();
    Ext.menu.MenuMgr.unregister(this.hmenu);
    this.hmenu.getEl().remove();
    delete this.hmenu
  }
  if (this.grid.enableColumnMove)
  {
    var C = Ext.dd.DDM.ids["gridHeader" + this.grid.getGridEl().id];
    if (C)
    {
      for (var A in C)
      {
        if (!C[A].config.isTarget && C[A].dragElId)
        {
          var B = C[A].dragElId;
          C[A].unreg();
          Ext.get(B).remove()
        } else
        {
          if (C[A].config.isTarget)
          {
            C[A].proxyTop.remove();
            C[A].proxyBottom.remove();
            C[A].unreg()
          }
        }
        if (Ext.dd.DDM.locationCache[A])
        {
          delete Ext.dd.DDM.locationCache[A]
        }
      }
      delete Ext.dd.DDM.ids["gridHeader" + this.grid.getGridEl().id]
    }
  }
  Ext.util.CSS.removeStyleSheet(this.grid.id + "-cssrules");
  this.bind(null, null);
  Ext.EventManager.removeResizeListener(this.onWindowResize, this)
},handleLockChange:function()
{
  this.refresh(true)
},onDenyColumnLock:function()
{
},onDenyColumnHide:function()
{
},handleHdMenuClick:function(D)
{
  var B = this.hdCtxIndex;
  var A = this.cm,E = this.ds;
  switch (D.id)
      {case"asc":E.sort(A.getDataIndex(B), "ASC");break;case"desc":E.sort(A.getDataIndex(B), "DESC");break;case"lock":var C = A.getLockedCount();if (A.getColumnCount(true) <= C + 1)
  {
    this.onDenyColumnLock();
    return
  }if (C != B)
  {
    A.setLocked(B, true, true);
    A.moveColumn(B, C);
    this.grid.fireEvent("columnmove", B, C)
  } else
  {
    A.setLocked(B, true)
  }break;case"unlock":var C = A.getLockedCount();if ((C - 1) != B)
  {
    A.setLocked(B, false, true);
    A.moveColumn(B, C - 1);
    this.grid.fireEvent("columnmove", B, C - 1)
  } else
  {
    A.setLocked(B, false)
  }break;default:B = A.getIndexById(D.id.substr(4));if (B != -1)
  {
    if (D.checked && A.getColumnCount(true) <= 1)
    {
      this.onDenyColumnHide();
      return false
    }
    A.setHidden(B, D.checked)
  }}
  return true
},beforeColMenuShow:function()
{
  var A = this.cm,C = A.getColumnCount();
  this.colMenu.removeAll();
  for (var B = 0; B < C; B++)
  {
    this.colMenu.add(new Ext.menu.CheckItem({id:"col-" + A.getColumnId(B),text:A.getColumnHeader(B),checked:!A.isHidden(B),hideOnClick:false}))
  }
},handleHdCtx:function(D, C, F)
{
  F.stopEvent();
  var E = this.getHeaderCell(C);
  this.hdCtxIndex = C;
  var B = this.hmenu.items,A = this.cm;
  B.get("asc").setDisabled(!A.isSortable(C));
  B.get("desc").setDisabled(!A.isSortable(C));
  if (this.grid.enableColLock !== false)
  {
    B.get("lock").setDisabled(A.isLocked(C));
    B.get("unlock").setDisabled(!A.isLocked(C))
  }
  this.hmenu.show(E, "tl-bl")
},handleHdOver:function(B)
{
  var A = this.findHeaderCell(B.getTarget());
  if (A && !this.headersDisabled)
  {
    if (this.grid.colModel.isSortable(this.getCellIndex(A)))
    {
      this.fly(A).addClass("x-grid-hd-over")
    }
  }
},handleHdOut:function(B)
{
  var A = this.findHeaderCell(B.getTarget());
  if (A)
  {
    this.fly(A).removeClass("x-grid-hd-over")
  }
},handleSplitDblClick:function(C, B)
{
  var A = this.getCellIndex(B);
  if (this.grid.enableColumnResize !== false && this.cm.isResizable(A) && !this.cm.isFixed(A))
  {
    this.autoSizeColumn(A, true);
    this.layout()
  }
},render:function()
{
  var B = this.cm;
  var D = B.getColumnCount();
  if (this.grid.monitorWindowResize === true)
  {
    Ext.EventManager.onWindowResize(this.onWindowResize, this, true)
  }
  var E = this.renderHeaders();
  var A = this.templates.body.apply({rows:""});
  var C = this.templates.master.apply({lockedBody:A,body:A,lockedHeader:E[0],header:E[1]});
  this.grid.getGridEl().dom.innerHTML = C;
  this.initElements();
  this.scroller.on("scroll", this.handleScroll, this);
  this.lockedBody.on("mousewheel", this.handleWheel, this);
  this.mainBody.on("mousewheel", this.handleWheel, this);
  this.mainHd.on("mouseover", this.handleHdOver, this);
  this.mainHd.on("mouseout", this.handleHdOut, this);
  this.mainHd.on("dblclick", this.handleSplitDblClick, this, {delegate:"." + this.splitClass});
  this.lockedHd.on("mouseover", this.handleHdOver, this);
  this.lockedHd.on("mouseout", this.handleHdOut, this);
  this.lockedHd.on("dblclick", this.handleSplitDblClick, this, {delegate:"." + this.splitClass});
  if (this.grid.enableColumnResize !== false && Ext.grid.SplitDragZone)
  {
    new Ext.grid.SplitDragZone(this.grid, this.lockedHd.dom, this.mainHd.dom)
  }
  this.updateSplitters();
  if (this.grid.enableColumnMove && Ext.grid.HeaderDragZone)
  {
    new Ext.grid.HeaderDragZone(this.grid, this.lockedHd.dom, this.mainHd.dom);
    new Ext.grid.HeaderDropZone(this.grid, this.lockedHd.dom, this.mainHd.dom)
  }
  if (this.grid.enableCtxMenu !== false && Ext.menu.Menu)
  {
    this.hmenu = new Ext.menu.Menu({id:this.grid.id + "-hctx"});
    this.hmenu.add({id:"asc",text:this.sortAscText,cls:"xg-hmenu-sort-asc"}, {id:"desc",text:this.sortDescText,cls:"xg-hmenu-sort-desc"});
    if (this.grid.enableColLock !== false)
    {
      this.hmenu.add("-", {id:"lock",text:this.lockText,cls:"xg-hmenu-lock"}, {id:"unlock",text:this.unlockText,cls:"xg-hmenu-unlock"})
    }
    if (this.grid.enableColumnHide !== false)
    {
      this.colMenu = new Ext.menu.Menu({id:this.grid.id + "-hcols-menu"});
      this.colMenu.on("beforeshow", this.beforeColMenuShow, this);
      this.colMenu.on("itemclick", this.handleHdMenuClick, this);
      this.hmenu.add("-", {id:"columns",text:this.columnsText,menu:this.colMenu})
    }
    this.hmenu.on("itemclick", this.handleHdMenuClick, this);
    this.grid.on("headercontextmenu", this.handleHdCtx, this)
  }
  if ((this.grid.enableDragDrop || this.grid.enableDrag) && Ext.grid.GridDragZone)
  {
    this.dd = new Ext.grid.GridDragZone(this.grid, {ddGroup:this.grid.ddGroup || "GridDD"})
  }
  this.updateHeaderSortState();
  this.beforeInitialResize();
  this.layout(true);
  this.renderPhase2.defer(1, this)
},renderPhase2:function()
{
  this.refresh();
  if (this.grid.autoSizeColumns)
  {
    this.autoSizeColumns()
  }
},beforeInitialResize:function()
{
},onColumnSplitterMoved:function(C, B)
{
  this.userResized = true;
  var A = this.grid.colModel;
  A.setColumnWidth(C, B, true);
  var D = A.getColumnId(C);
  this.css.updateRule(this.colSelector + D, "width", (B - this.borderWidth) + "px");
  this.css.updateRule(this.hdSelector + D, "width", (B - this.borderWidth) + "px");
  this.updateSplitters();
  this.layout();
  this.grid.fireEvent("columnresize", C, B)
},syncRowHeights:function(I, E)
{
  if (this.grid.enableRowHeightSync === true && this.cm.getLockedCount() > 0)
  {
    I = I || 0;
    var F = this.getBodyTable().rows;
    var H = this.getLockedTable().rows;
    var G = F.length - 1;
    E = Math.min(E || G, G);
    for (var C = I; C <= E; C++)
    {
      var A = F[C],B = H[C];
      var D = Math.max(A.offsetHeight, B.offsetHeight);
      A.style.height = B.style.height = D + "px"
    }
  }
},layout:function(B, C)
{
  var W = this.grid;
  var E = W.autoHeight;
  var L = 16;
  var a = W.getGridEl(),H = this.cm,I = W.autoExpandColumn,O = this;
  if (!a.dom.offsetWidth)
  {
    if (B)
    {
      this.lockedWrap.show();
      this.mainWrap.show()
    }
    return
  }
  var V = this.cm.isLocked(0);
  var F = this.headerPanel.getHeight();
  var G = this.footerPanel.getHeight();
  if (E)
  {
    var K = this.getBodyTable().offsetHeight + F + G + this.mainHd.getHeight();
    var U = K + a.getBorderWidth("tb");
    if (W.maxHeight)
    {
      U = Math.min(W.maxHeight, U)
    }
    a.setHeight(U)
  }
  if (W.autoWidth)
  {
    a.setWidth(H.getTotalWidth() + a.getBorderWidth("lr"))
  }
  var N = this.scroller;
  var T = a.getSize(true);
  this.el.setSize(T.width, T.height);
  this.headerPanel.setWidth(T.width);
  this.footerPanel.setWidth(T.width);
  var M = this.mainHd.getHeight();
  var Q = T.width;
  var d = T.height - (F + G);
  N.setSize(Q, d);
  var Z = this.getBodyTable();
  var S = V ? Math.max(this.getLockedTable().offsetWidth, this.lockedHd.dom.firstChild.offsetWidth) : 0;
  var X = Z.offsetHeight;
  var J = S + Z.offsetWidth;
  var b = false,Y = false;
  this.scrollSizer.setSize(J, X + M);
  var D = this.lockedWrap,P = this.mainWrap;
  var R = this.lockedBody,A = this.mainBody;
  setTimeout(function()
  {
    var j = N.dom.offsetTop;
    var e = N.dom.clientWidth,k = N.dom.clientHeight;
    D.setTop(j);
    D.setSize(S, k);
    P.setLeftTop(S, j);
    P.setSize(e - S, k);
    R.setHeight(k - M);
    A.setHeight(k - M);
    if (C !== true && !O.userResized && I)
    {
      var i = H.getIndexById(I);
      var f = H.getTotalWidth(false);
      var g = H.getColumnWidth(i);
      var c = Math.min(Math.max(((e - f) + g - 2) - (e <= N.dom.offsetWidth ? 0 : 18), W.autoExpandMin), W.autoExpandMax);
      if (g != c)
      {
        H.setColumnWidth(i, c, true);
        O.css.updateRule(O.colSelector + I, "width", (c - O.borderWidth) + "px");
        O.css.updateRule(O.hdSelector + I, "width", (c - O.borderWidth) + "px");
        O.updateSplitters();
        O.layout(false, true)
      }
    }
    if (B)
    {
      D.show();
      P.show()
    }
  }, 10)
},onWindowResize:function()
{
  if (!this.grid.monitorWindowResize || this.grid.autoHeight)
  {
    return
  }
  this.layout()
},appendFooter:function(A)
{
  return null
},sortAscText:"Sort Ascending",sortDescText:"Sort Descending",lockText:"Lock Column",unlockText:"Unlock Column",columnsText:"Columns"});
Ext.grid.HeaderDragZone = function(A, C, B)
{
  this.grid = A;
  this.view = A.getView();
  this.ddGroup = "gridHeader" + this.grid.getGridEl().id;
  Ext.grid.HeaderDragZone.superclass.constructor.call(this, C);
  if (B)
  {
    this.setHandleElId(Ext.id(C));
    this.setOuterHandleElId(Ext.id(B))
  }
  this.scroll = false
};
Ext.extend(Ext.grid.HeaderDragZone, Ext.dd.DragZone, {maxDragWidth:120,getDragData:function(C)
{
  var A = Ext.lib.Event.getTarget(C);
  var B = this.view.findHeaderCell(A);
  if (B)
  {
    return{ddel:B.firstChild,header:B}
  }
  return false
},onInitDrag:function(A)
{
  this.view.headersDisabled = true;
  var B = this.dragData.ddel.cloneNode(true);
  B.id = Ext.id();
  B.style.width = Math.min(this.dragData.header.offsetWidth, this.maxDragWidth) + "px";
  this.proxy.update(B);
  return true
},afterValidDrop:function()
{
  var A = this.view;
  setTimeout(function()
  {
    A.headersDisabled = false
  }, 50)
},afterInvalidDrop:function()
{
  var A = this.view;
  setTimeout(function()
  {
    A.headersDisabled = false
  }, 50)
}});
Ext.grid.HeaderDropZone = function(A, C, B)
{
  this.grid = A;
  this.view = A.getView();
  this.proxyTop = Ext.DomHelper.append(document.body, {cls:"col-move-top",html:"&#160;"}, true);
  this.proxyBottom = Ext.DomHelper.append(document.body, {cls:"col-move-bottom",html:"&#160;"}, true);
  this.proxyTop.hide = this.proxyBottom.hide = function()
  {
    this.setLeftTop(-100, -100);
    this.setStyle("visibility", "hidden")
  };
  this.ddGroup = "gridHeader" + this.grid.getGridEl().id;
  Ext.grid.HeaderDropZone.superclass.constructor.call(this, A.getGridEl().dom)
};
Ext.extend(Ext.grid.HeaderDropZone, Ext.dd.DropZone, {proxyOffsets:[-4,-9],fly:Ext.Element.fly,getTargetFromEvent:function(C)
{
  var A = Ext.lib.Event.getTarget(C);
  var B = this.view.findCellIndex(A);
  if (B !== false)
  {
    return this.view.getHeaderCell(B)
  }
},nextVisible:function(C)
{
  var B = this.view,A = this.grid.colModel;
  C = C.nextSibling;
  while (C)
  {
    if (!A.isHidden(B.getCellIndex(C)))
    {
      return C
    }
    C = C.nextSibling
  }
  return null
},prevVisible:function(C)
{
  var B = this.view,A = this.grid.colModel;
  C = C.prevSibling;
  while (C)
  {
    if (!A.isHidden(B.getCellIndex(C)))
    {
      return C
    }
    C = C.prevSibling
  }
  return null
},positionIndicator:function(D, B, E)
{
  var H = Ext.lib.Event.getPageX(E);
  var A = Ext.lib.Dom.getRegion(B.firstChild);
  var I,K,G = A.top + this.proxyOffsets[1];
  if ((A.right - H) <= (A.right - A.left) / 2)
  {
    I = A.right + this.view.borderWidth;
    K = "after"
  } else
  {
    I = A.left;
    K = "before"
  }
  var F = this.view.getCellIndex(D);
  var J = this.view.getCellIndex(B);
  if (this.grid.colModel.isFixed(J))
  {
    return false
  }
  var C = this.grid.colModel.isLocked(J);
  if (K == "after")
  {
    J++
  }
  if (F < J)
  {
    J--
  }
  if (F == J && (C == this.grid.colModel.isLocked(F)))
  {
    return false
  }
  I += this.proxyOffsets[0];
  this.proxyTop.setLeftTop(I, G);
  this.proxyTop.show();
  if (!this.bottomOffset)
  {
    this.bottomOffset = this.view.mainHd.getHeight()
  }
  this.proxyBottom.setLeftTop(I, G + this.proxyTop.dom.offsetHeight + this.bottomOffset);
  this.proxyBottom.show();
  return K
},onNodeEnter:function(D, A, C, B)
{
  if (B.header != D)
  {
    this.positionIndicator(B.header, D, C)
  }
},onNodeOver:function(E, B, D, C)
{
  var A = false;
  if (C.header != E)
  {
    A = this.positionIndicator(C.header, E, D)
  }
  if (!A)
  {
    this.proxyTop.hide();
    this.proxyBottom.hide()
  }
  return A ? this.dropAllowed : this.dropNotAllowed
},onNodeOut:function(D, A, C, B)
{
  this.proxyTop.hide();
  this.proxyBottom.hide()
},onNodeDrop:function(B, K, F, D)
{
  var E = D.header;
  if (E != B)
  {
    var I = this.grid.colModel;
    var H = Ext.lib.Event.getPageX(F);
    var A = Ext.lib.Dom.getRegion(B.firstChild);
    var L = (A.right - H) <= ((A.right - A.left) / 2) ? "after" : "before";
    var G = this.view.getCellIndex(E);
    var J = this.view.getCellIndex(B);
    var C = I.isLocked(J);
    if (L == "after")
    {
      J++
    }
    if (G < J)
    {
      J--
    }
    if (G == J && (C == I.isLocked(G)))
    {
      return false
    }
    I.setLocked(G, C, true);
    I.moveColumn(G, J);
    this.grid.fireEvent("columnmove", G, J);
    return true
  }
  return false
}});
Ext.grid.GridView.ColumnDragZone = function(A, B)
{
  Ext.grid.GridView.ColumnDragZone.superclass.constructor.call(this, A, B, null);
  this.proxy.el.addClass("x-grid3-col-dd")
};
Ext.extend(Ext.grid.GridView.ColumnDragZone, Ext.grid.HeaderDragZone, {handleMouseDown:function(A)
{
},callHandleMouseDown:function(A)
{
  Ext.grid.GridView.ColumnDragZone.superclass.handleMouseDown.call(this, A)
}});
Ext.grid.SplitDragZone = function(A, C, B)
{
  this.grid = A;
  this.view = A.getView();
  this.proxy = this.view.resizeProxy;
  Ext.grid.SplitDragZone.superclass.constructor.call(this, C, "gridSplitters" + this.grid.getGridEl().id, {dragElId:Ext.id(this.proxy.dom),resizeFrame:false});
  this.setHandleElId(Ext.id(C));
  this.setOuterHandleElId(Ext.id(B));
  this.scroll = false
};
Ext.extend(Ext.grid.SplitDragZone, Ext.dd.DDProxy, {fly:Ext.Element.fly,b4StartDrag:function(A, D)
{
  this.view.headersDisabled = true;
  this.proxy.setHeight(this.view.mainWrap.getHeight());
  var B = this.cm.getColumnWidth(this.cellIndex);
  var C = Math.max(B - this.grid.minColumnWidth, 0);
  this.resetConstraints();
  this.setXConstraint(C, 1000);
  this.setYConstraint(0, 0);
  this.minX = A - C;
  this.maxX = A + 1000;
  this.startPos = A;
  Ext.dd.DDProxy.prototype.b4StartDrag.call(this, A, D)
},handleMouseDown:function(B)
{
  ev = Ext.EventObject.setEvent(B);
  var A = this.fly(ev.getTarget());
  if (A.hasClass("x-grid-split"))
  {
    this.cellIndex = this.view.getCellIndex(A.dom);
    this.split = A.dom;
    this.cm = this.grid.colModel;
    if (this.cm.isResizable(this.cellIndex) && !this.cm.isFixed(this.cellIndex))
    {
      Ext.grid.SplitDragZone.superclass.handleMouseDown.apply(this, arguments)
    }
  }
},endDrag:function(C)
{
  this.view.headersDisabled = false;
  var A = Math.max(this.minX, Ext.lib.Event.getPageX(C));
  var B = A - this.startPos;
  this.view.onColumnSplitterMoved(this.cellIndex, this.cm.getColumnWidth(this.cellIndex) + B)
},autoOffset:function()
{
  this.setDelta(0, 0)
}});
Ext.grid.GridDragZone = function(B, A)
{
  this.view = B.getView();
  Ext.grid.GridDragZone.superclass.constructor.call(this, this.view.mainBody.dom, A);
  if (this.view.lockedBody)
  {
    this.setHandleElId(Ext.id(this.view.mainBody.dom));
    this.setOuterHandleElId(Ext.id(this.view.lockedBody.dom))
  }
  this.scroll = false;
  this.grid = B;
  this.ddel = document.createElement("div");
  this.ddel.className = "x-grid-dd-wrap"
};
Ext.extend(Ext.grid.GridDragZone, Ext.dd.DragZone, {ddGroup:"GridDD",getDragData:function(B)
{
  var A = Ext.lib.Event.getTarget(B);
  var D = this.view.findRowIndex(A);
  if (D !== false)
  {
    var C = this.grid.selModel;
    if (!C.isSelected(D) || B.hasModifier())
    {
      C.handleMouseDown(B, A)
    }
    return{grid:this.grid,ddel:this.ddel,rowIndex:D,selections:C.getSelections()}
  }
  return false
},onInitDrag:function(B)
{
  var A = this.dragData;
  this.ddel.innerHTML = this.grid.getDragDropText();
  this.proxy.update(this.ddel)
},afterRepair:function()
{
  this.dragging = false
},getRepairXY:function(B, A)
{
  return false
},onEndDrag:function(A, B)
{
},onValidDrop:function(A, B, C)
{
  this.hideProxy()
},beforeInvalidDrop:function(A, B)
{
}});
Ext.grid.ColumnModel = function(B)
{
  this.config = B;
  this.lookup = {};
  for (var C = 0,A = B.length; C < A; C++)
  {
    var D = B[C];
    if (typeof D.dataIndex == "undefined")
    {
      D.dataIndex = C
    }
    if (typeof D.renderer == "string")
    {
      D.renderer = Ext.util.Format[D.renderer]
    }
    if (typeof D.id == "undefined")
    {
      D.id = C
    }
    if (D.editor && D.editor.isFormField)
    {
      D.editor = new Ext.grid.GridEditor(D.editor)
    }
    this.lookup[D.id] = D
  }
  this.defaultWidth = 100;
  this.defaultSortable = false;
  this.addEvents({"widthchange":true,"headerchange":true,"hiddenchange":true,"columnmoved":true,"columnlockchange":true});
  Ext.grid.ColumnModel.superclass.constructor.call(this)
};
Ext.extend(Ext.grid.ColumnModel, Ext.util.Observable, {getColumnId:function(A)
{
  return this.config[A].id
},getColumnById:function(A)
{
  return this.lookup[A]
},getIndexById:function(C)
{
  for (var B = 0,A = this.config.length; B < A; B++)
  {
    if (this.config[B].id == C)
    {
      return B
    }
  }
  return -1
},moveColumn:function(C, A)
{
  var B = this.config[C];
  this.config.splice(C, 1);
  this.config.splice(A, 0, B);
  this.dataMap = null;
  this.fireEvent("columnmoved", this, C, A)
},isLocked:function(A)
{
  return this.config[A].locked === true
},setLocked:function(B, C, A)
{
  if (this.isLocked(B) == C)
  {
    return
  }
  this.config[B].locked = C;
  if (!A)
  {
    this.fireEvent("columnlockchange", this, B, C)
  }
},getTotalLockedWidth:function()
{
  var A = 0;
  for (var B = 0; B < this.config.length; B++)
  {
    if (this.isLocked(B) && !this.isHidden(B))
    {
      this.totalWidth += this.getColumnWidth(B)
    }
  }
  return A
},getLockedCount:function()
{
  for (var B = 0,A = this.config.length; B < A; B++)
  {
    if (!this.isLocked(B))
    {
      return B
    }
  }
},getColumnCount:function(C)
{
  if (C === true)
  {
    var D = 0;
    for (var B = 0,A = this.config.length; B < A; B++)
    {
      if (!this.isHidden(B))
      {
        D++
      }
    }
    return D
  }
  return this.config.length
},getColumnsBy:function(D, C)
{
  var E = [];
  for (var B = 0,A = this.config.length; B < A; B++)
  {
    var F = this.config[B];
    if (D.call(C || this, F, B) === true)
    {
      E[E.length] = F
    }
  }
  return E
},isSortable:function(A)
{
  if (typeof this.config[A].sortable == "undefined")
  {
    return this.defaultSortable
  }
  return this.config[A].sortable
},getRenderer:function(A)
{
  if (!this.config[A].renderer)
  {
    return Ext.grid.ColumnModel.defaultRenderer
  }
  return this.config[A].renderer
},setRenderer:function(A, B)
{
  this.config[A].renderer = B
},getColumnWidth:function(A)
{
  return this.config[A].width || this.defaultWidth
},setColumnWidth:function(B, C, A)
{
  this.config[B].width = C;
  this.totalWidth = null;
  if (!A)
  {
    this.fireEvent("widthchange", this, B, C)
  }
},getTotalWidth:function(B)
{
  if (!this.totalWidth)
  {
    this.totalWidth = 0;
    for (var C = 0,A = this.config.length; C < A; C++)
    {
      if (B || !this.isHidden(C))
      {
        this.totalWidth += this.getColumnWidth(C)
      }
    }
  }
  return this.totalWidth
},getColumnHeader:function(A)
{
  return this.config[A].header
},setColumnHeader:function(A, B)
{
  this.config[A].header = B;
  this.fireEvent("headerchange", this, A, B)
},getColumnTooltip:function(A)
{
  return this.config[A].tooltip
},setColumnTooltip:function(A, B)
{
  this.config[A].tooltip = B
},getDataIndex:function(A)
{
  return this.config[A].dataIndex
},setDataIndex:function(A, B)
{
  this.config[A].dataIndex = B
},findColumnIndex:function(C)
{
  var D = this.config;
  for (var B = 0,A = D.length; B < A; B++)
  {
    if (D[B].dataIndex == C)
    {
      return B
    }
  }
  return -1
},isCellEditable:function(A, B)
{
  return(this.config[A].editable || (typeof this.config[A].editable == "undefined" && this.config[A].editor)) ? true : false
},getCellEditor:function(A, B)
{
  return this.config[A].editor
},setEditable:function(A, B)
{
  this.config[A].editable = B
},isHidden:function(A)
{
  return this.config[A].hidden
},isFixed:function(A)
{
  return this.config[A].fixed
},isResizable:function(A)
{
  return A >= 0 && this.config[A].resizable !== false && this.config[A].fixed !== true
},setHidden:function(A, B)
{
  this.config[A].hidden = B;
  this.totalWidth = null;
  this.fireEvent("hiddenchange", this, A, B)
},setEditor:function(A, B)
{
  this.config[A].editor = B
}});
Ext.grid.ColumnModel.defaultRenderer = function(A)
{
  if (typeof A == "string" && A.length < 1)
  {
    return"&#160;"
  }
  return A
};
Ext.grid.DefaultColumnModel = Ext.grid.ColumnModel;
Ext.grid.AbstractSelectionModel = function()
{
  this.locked = false;
  Ext.grid.AbstractSelectionModel.superclass.constructor.call(this)
};
Ext.extend(Ext.grid.AbstractSelectionModel, Ext.util.Observable, {init:function(A)
{
  this.grid = A;
  this.initEvents()
},lock:function()
{
  this.locked = true
},unlock:function()
{
  this.locked = false
},isLocked:function()
{
  return this.locked
}});
Ext.grid.RowSelectionModel = function(A)
{
  Ext.apply(this, A);
  this.selections = new Ext.util.MixedCollection(false, function(B)
  {
    return B.id
  });
  this.last = false;
  this.lastActive = false;
  this.addEvents({"selectionchange":true,"beforerowselect":true,"rowselect":true,"rowdeselect":true});
  this.locked = false
};
Ext.extend(Ext.grid.RowSelectionModel, Ext.grid.AbstractSelectionModel, {singleSelect:false,initEvents:function()
{
  if (!this.grid.enableDragDrop && !this.grid.enableDrag)
  {
    this.grid.on("mousedown", this.handleMouseDown, this)
  } else
  {
    this.grid.on("rowclick", function(B, D, C)
    {
      if (C.button === 0 && !C.shiftKey && !C.ctrlKey)
      {
        this.selectRow(D, false);
        B.view.focusRow(D)
      }
    }, this)
  }
  this.rowNav = new Ext.KeyNav(this.grid.getGridEl(), {"up":function(C)
  {
    if (!C.shiftKey)
    {
      this.selectPrevious(C.shiftKey)
    } else
    {
      if (this.last !== false && this.lastActive !== false)
      {
        var B = this.last;
        this.selectRange(this.last, this.lastActive - 1);
        this.grid.getView().focusRow(this.lastActive);
        if (B !== false)
        {
          this.last = B
        }
      } else
      {
        this.selectFirstRow()
      }
    }
  },"down":function(C)
  {
    if (!C.shiftKey)
    {
      this.selectNext(C.shiftKey)
    } else
    {
      if (this.last !== false && this.lastActive !== false)
      {
        var B = this.last;
        this.selectRange(this.last, this.lastActive + 1);
        this.grid.getView().focusRow(this.lastActive);
        if (B !== false)
        {
          this.last = B
        }
      } else
      {
        this.selectFirstRow()
      }
    }
  },scope:this});
  var A = this.grid.view;
  A.on("refresh", this.onRefresh, this);
  A.on("rowupdated", this.onRowUpdated, this);
  A.on("rowremoved", this.onRemove, this)
},onRefresh:function()
{
  var D = this.grid.dataSource,B,A = this.grid.view;
  var C = this.selections;
  C.each(function(E)
  {
    if ((B = D.indexOfId(E.id)) != -1)
    {
      A.onRowSelect(B)
    } else
    {
      C.remove(E)
    }
  })
},onRemove:function(A, B, C)
{
  this.selections.remove(C)
},onRowUpdated:function(A, B, C)
{
  if (this.isSelected(C))
  {
    A.onRowSelect(B)
  }
},selectRecords:function(B, E)
{
  if (!E)
  {
    this.clearSelections()
  }
  var D = this.grid.dataSource;
  for (var C = 0,A = B.length; C < A; C++)
  {
    this.selectRow(D.indexOf(B[C]), true)
  }
},getCount:function()
{
  return this.selections.length
},selectFirstRow:function()
{
  this.selectRow(0)
},selectLastRow:function(A)
{
  this.selectRow(this.grid.dataSource.getCount() - 1, A)
},selectNext:function(A)
{
  if (this.last !== false && (this.last + 1) < this.grid.dataSource.getCount())
  {
    this.selectRow(this.last + 1, A);
    this.grid.getView().focusRow(this.last)
  }
},selectPrevious:function(A)
{
  if (this.last)
  {
    this.selectRow(this.last - 1, A);
    this.grid.getView().focusRow(this.last)
  }
},getSelections:function()
{
  return[].concat(this.selections.items)
},getSelected:function()
{
  return this.selections.itemAt(0)
},clearSelections:function(A)
{
  if (this.locked)
  {
    return
  }
  if (A !== true)
  {
    var C = this.grid.dataSource;
    var B = this.selections;
    B.each(function(D)
    {
      this.deselectRow(C.indexOfId(D.id))
    }, this);
    B.clear()
  } else
  {
    this.selections.clear()
  }
  this.last = false
},selectAll:function()
{
  if (this.locked)
  {
    return
  }
  this.selections.clear();
  for (var B = 0,A = this.grid.dataSource.getCount(); B < A; B++)
  {
    this.selectRow(B, true)
  }
},hasSelection:function()
{
  return this.selections.length > 0
},isSelected:function(A)
{
  var B = typeof A == "number" ? this.grid.dataSource.getAt(A) : A;
  return(B && this.selections.key(B.id) ? true : false)
},isIdSelected:function(A)
{
  return(this.selections.key(A) ? true : false)
},handleMouseDown:function(E, C)
{
  var A = this.grid.getView(),F;
  if (this.isLocked() || (F = A.findRowIndex(C)) === false)
  {
    return
  }
  if (E.shiftKey && this.last !== false)
  {
    var D = this.last;
    this.selectRange(D, F, E.ctrlKey);
    this.last = D;
    A.focusRow(F)
  } else
  {
    var B = this.isSelected(F);
    if (E.button !== 0 && B)
    {
      A.focusRow(F)
    } else
    {
      if (E.ctrlKey && B)
      {
        this.deselectRow(F)
      } else
      {
        if (!B)
        {
          this.selectRow(F, E.button === 0 && (E.ctrlKey || E.shiftKey));
          A.focusRow(F)
        }
      }
    }
  }
},selectRows:function(C, D)
{
  if (!D)
  {
    this.clearSelections()
  }
  for (var B = 0,A = C.length; B < A; B++)
  {
    this.selectRow(C[B], true)
  }
},selectRange:function(B, A, D)
{
  if (this.locked)
  {
    return
  }
  if (!D)
  {
    this.clearSelections()
  }
  if (B <= A)
  {
    for (var C = B; C <= A; C++)
    {
      this.selectRow(C, true)
    }
  } else
  {
    for (var C = B; C >= A; C--)
    {
      this.selectRow(C, true)
    }
  }
},deselectRange:function(C, B, A)
{
  if (this.locked)
  {
    return
  }
  for (var D = C; D <= B; D++)
  {
    this.deselectRow(D, A)
  }
},selectRow:function(B, D, A)
{
  if (this.locked || (B < 0 || B >= this.grid.dataSource.getCount()))
  {
    return
  }
  if (this.fireEvent("beforerowselect", this, B, D) !== false)
  {
    if (!D || this.singleSelect)
    {
      this.clearSelections()
    }
    var C = this.grid.dataSource.getAt(B);
    this.selections.add(C);
    this.last = this.lastActive = B;
    if (!A)
    {
      this.grid.getView().onRowSelect(B)
    }
    this.fireEvent("rowselect", this, B, C);
    this.fireEvent("selectionchange", this)
  }
},deselectRow:function(B, A)
{
  if (this.locked)
  {
    return
  }
  if (this.last == B)
  {
    this.last = false
  }
  if (this.lastActive == B)
  {
    this.lastActive = false
  }
  var C = this.grid.dataSource.getAt(B);
  this.selections.remove(C);
  if (!A)
  {
    this.grid.getView().onRowDeselect(B)
  }
  this.fireEvent("rowdeselect", this, B);
  this.fireEvent("selectionchange", this)
},restoreLast:function()
{
  if (this._last)
  {
    this.last = this._last
  }
},acceptsNav:function(C, B, A)
{
  return !A.isHidden(B) && A.isCellEditable(B, C)
},onEditorKey:function(E, D)
{
  var B = D.getKey(),F,C = this.grid,A = C.activeEditor;
  if (B == D.TAB)
  {
    D.stopEvent();
    A.completeEdit();
    if (D.shiftKey)
    {
      F = C.walkCells(A.row, A.col - 1, -1, this.acceptsNav, this)
    } else
    {
      F = C.walkCells(A.row, A.col + 1, 1, this.acceptsNav, this)
    }
  } else
  {
    if (B == D.ENTER && !D.ctrlKey)
    {
      D.stopEvent();
      A.completeEdit();
      if (D.shiftKey)
      {
        F = C.walkCells(A.row - 1, A.col, -1, this.acceptsNav, this)
      } else
      {
        F = C.walkCells(A.row + 1, A.col, 1, this.acceptsNav, this)
      }
    } else
    {
      if (B == D.ESC)
      {
        A.cancelEdit()
      }
    }
  }
  if (F)
  {
    C.startEditing(F[0], F[1])
  }
}});
Ext.grid.CellSelectionModel = function(A)
{
  Ext.apply(this, A);
  this.selection = null;
  this.addEvents({"beforecellselect":true,"cellselect":true,"selectionchange":true})
};
Ext.extend(Ext.grid.CellSelectionModel, Ext.grid.AbstractSelectionModel, {initEvents:function()
{
  this.grid.on("mousedown", this.handleMouseDown, this);
  this.grid.getGridEl().on(Ext.isIE ? "keydown" : "keypress", this.handleKeyDown, this);
  var A = this.grid.view;
  A.on("refresh", this.onViewChange, this);
  A.on("rowupdated", this.onRowUpdated, this);
  A.on("beforerowremoved", this.clearSelections, this);
  A.on("beforerowsinserted", this.clearSelections, this);
  if (this.grid.isEditor)
  {
    this.grid.on("beforeedit", this.beforeEdit, this)
  }
},beforeEdit:function(A)
{
  this.select(A.row, A.column, false, true, A.record)
},onRowUpdated:function(A, B, C)
{
  if (this.selection && this.selection.record == C)
  {
    A.onCellSelect(B, this.selection.cell[1])
  }
},onViewChange:function()
{
  this.clearSelections(true)
},getSelectedCell:function()
{
  return this.selection ? this.selection.cell : null
},clearSelections:function(B)
{
  var A = this.selection;
  if (A)
  {
    if (B !== true)
    {
      this.grid.view.onCellDeselect(A.cell[0], A.cell[1])
    }
    this.selection = null;
    this.fireEvent("selectionchange", this, null)
  }
},hasSelection:function()
{
  return this.selection ? true : false
},handleMouseDown:function(D, C)
{
  var B = this.grid.getView();
  if (this.isLocked())
  {
    return
  }
  var E = B.findRowIndex(C);
  var A = B.findCellIndex(C);
  if (E !== false && A !== false)
  {
    this.select(E, A)
  }
},select:function(F, C, B, E, D)
{
  if (this.fireEvent("beforecellselect", this, F, C) !== false)
  {
    this.clearSelections();
    D = D || this.grid.dataSource.getAt(F);
    this.selection = {record:D,cell:[F,C]};
    if (!B)
    {
      var A = this.grid.getView();
      A.onCellSelect(F, C);
      if (E !== true)
      {
        A.focusCell(F, C)
      }
    }
    this.fireEvent("cellselect", this, F, C);
    this.fireEvent("selectionchange", this, this.selection)
  }
},isSelectable:function(C, B, A)
{
  return !A.isHidden(B)
},handleKeyDown:function(F)
{
  if (!F.isNavKeyPress())
  {
    return
  }
  var E = this.grid,J = this.selection;
  if (!J)
  {
    F.stopEvent();
    var I = E.walkCells(0, 0, 1, this.isSelectable, this);
    if (I)
    {
      this.select(I[0], I[1])
    }
    return
  }
  var B = this;
  var H = function(M, K, L)
  {
    return E.walkCells(M, K, L, B.isSelectable, B)
  };
  var C = F.getKey(),A = J.cell[0],G = J.cell[1];
  var D;
  switch (C)
      {case F.TAB:if (F.shiftKey)
  {
    D = H(A, G - 1, -1)
  } else
  {
    D = H(A, G + 1, 1)
  }break;case F.DOWN:D = H(A + 1, G, 1);break;case F.UP:D = H(A - 1, G, -1);break;case F.RIGHT:D = H(A, G + 1, 1);break;case F.LEFT:D = H(A, G - 1, -1);break;case F.ENTER:if (E.isEditor && !E.editing)
  {
    E.startEditing(A, G);
    F.stopEvent();
    return
  }break}
  if (D)
  {
    this.select(D[0], D[1]);
    F.stopEvent()
  }
},acceptsNav:function(C, B, A)
{
  return !A.isHidden(B) && A.isCellEditable(B, C)
},onEditorKey:function(E, D)
{
  var B = D.getKey(),F,C = this.grid,A = C.activeEditor;
  if (B == D.TAB)
  {
    if (D.shiftKey)
    {
      F = C.walkCells(A.row, A.col - 1, -1, this.acceptsNav, this)
    } else
    {
      F = C.walkCells(A.row, A.col + 1, 1, this.acceptsNav, this)
    }
    D.stopEvent()
  } else
  {
    if (B == D.ENTER && !D.ctrlKey)
    {
      A.completeEdit();
      D.stopEvent()
    } else
    {
      if (B == D.ESC)
      {
        A.cancelEdit()
      }
    }
  }
  if (F)
  {
    C.startEditing(F[0], F[1])
  }
}});
Ext.grid.EditorGrid = function(A, B)
{
  Ext.grid.EditorGrid.superclass.constructor.call(this, A, B);
  this.getGridEl().addClass("xedit-grid");
  if (!this.selModel)
  {
    this.selModel = new Ext.grid.CellSelectionModel()
  }
  this.activeEditor = null;
  this.addEvents({"beforeedit":true,"afteredit":true,"validateedit":true});
  this.on("bodyscroll", this.stopEditing, this);
  this.on(this.clicksToEdit == 1 ? "cellclick" : "celldblclick", this.onCellDblClick, this)
};
Ext.extend(Ext.grid.EditorGrid, Ext.grid.Grid, {clicksToEdit:2,isEditor:true,trackMouseOver:false,onCellDblClick:function(B, C, A)
{
  this.startEditing(C, A)
},onEditComplete:function(B, D, A)
{
  this.editing = false;
  this.activeEditor = null;
  B.un("specialkey", this.selModel.onEditorKey, this.selModel);
  if (String(D) !== String(A))
  {
    var C = B.record;
    var F = this.colModel.getDataIndex(B.col);
    var E = {grid:this,record:C,field:F,originalValue:A,value:D,row:B.row,column:B.col,cancel:false};
    if (this.fireEvent("validateedit", E) !== false && !E.cancel)
    {
      C.set(F, E.value);
      delete E.cancel;
      this.fireEvent("afteredit", E)
    }
  }
  this.view.focusCell(B.row, B.col)
},startEditing:function(F, B)
{
  this.stopEditing();
  if (this.colModel.isCellEditable(B, F))
  {
    this.view.ensureVisible(F, B, true);
    var C = this.dataSource.getAt(F);
    var E = this.colModel.getDataIndex(B);
    var D = {grid:this,record:C,field:E,value:C.data[E],row:F,column:B,cancel:false};
    if (this.fireEvent("beforeedit", D) !== false && !D.cancel)
    {
      this.editing = true;
      var A = this.colModel.getCellEditor(B, F);
      if (!A.rendered)
      {
        A.render(A.parentEl || document.body)
      }
      (function()
      {
        A.row = F;
        A.col = B;
        A.record = C;
        A.on("complete", this.onEditComplete, this, {single:true});
        A.on("specialkey", this.selModel.onEditorKey, this.selModel);
        this.activeEditor = A;
        var G = C.data[E];
        A.startEdit(this.view.getCell(F, B), G)
      }).defer(50, this)
    }
  }
},stopEditing:function()
{
  if (this.activeEditor)
  {
    this.activeEditor.completeEdit()
  }
  this.activeEditor = null
}});
Ext.grid.GridEditor = function(B, A)
{
  Ext.grid.GridEditor.superclass.constructor.call(this, B, A);
  B.monitorTab = false
};
Ext.extend(Ext.grid.GridEditor, Ext.Editor, {alignment:"tl-tl",autoSize:"width",hideEl:false,cls:"x-small-editor x-grid-editor",shim:false,shadow:"frame"});
Ext.grid.PropertyRecord = Ext.data.Record.create([{name:"name",type:"string"},"value"]);
Ext.grid.PropertyStore = function(A, B)
{
  this.grid = A;
  this.store = new Ext.data.Store({recordType:Ext.grid.PropertyRecord});
  this.store.on("update", this.onUpdate, this);
  if (B)
  {
    this.setSource(B)
  }
  Ext.grid.PropertyStore.superclass.constructor.call(this)
};
Ext.extend(Ext.grid.PropertyStore, Ext.util.Observable, {setSource:function(C)
{
  this.source = C;
  this.store.removeAll();
  var B = [];
  for (var A in C)
  {
    if (this.isEditableValue(C[A]))
    {
      B.push(new Ext.grid.PropertyRecord({name:A,value:C[A]}, A))
    }
  }
  this.store.loadRecords({records:B}, {}, true)
},onUpdate:function(E, A, D)
{
  if (D == Ext.data.Record.EDIT)
  {
    var B = A.data["value"];
    var C = A.modified["value"];
    if (this.grid.fireEvent("beforepropertychange", this.source, A.id, B, C) !== false)
    {
      this.source[A.id] = B;
      A.commit();
      this.grid.fireEvent("propertychange", this.source, A.id, B, C)
    } else
    {
      A.reject()
    }
  }
},getProperty:function(A)
{
  return this.store.getAt(A)
},isEditableValue:function(A)
{
  if (A && A instanceof Date)
  {
    return true
  } else
  {
    if (typeof A == "object" || typeof A == "function")
    {
      return false
    }
  }
  return true
},setValue:function(B, A)
{
  this.source[B] = A;
  this.store.getById(B).set("value", A)
},getSource:function()
{
  return this.source
}});
Ext.grid.PropertyColumnModel = function(B, A)
{
  this.grid = B;
  var C = Ext.grid;
  C.PropertyColumnModel.superclass.constructor.call(this, [{header:this.nameText,sortable:true,dataIndex:"name",id:"name"},{header:this.valueText,resizable:false,dataIndex:"value",id:"value"}]);
  this.store = A;
  this.bselect = Ext.DomHelper.append(document.body, {tag:"select",style:"display:none",cls:"x-grid-editor",children:[{tag:"option",value:"true",html:"true"},{tag:"option",value:"false",html:"false"}]});
  Ext.id(this.bselect);
  var D = Ext.form;
  this.editors = {"date":new C.GridEditor(new D.DateField({selectOnFocus:true})),"string":new C.GridEditor(new D.TextField({selectOnFocus:true})),"number":new C.GridEditor(new D.NumberField({selectOnFocus:true,style:"text-align:left;"})),"boolean":new C.GridEditor(new D.Field({el:this.bselect,selectOnFocus:true}))};
  this.renderCellDelegate = this.renderCell.createDelegate(this);
  this.renderPropDelegate = this.renderProp.createDelegate(this)
};
Ext.extend(Ext.grid.PropertyColumnModel, Ext.grid.ColumnModel, {nameText:"Name",valueText:"Value",dateFormat:"m/j/Y",renderDate:function(A)
{
  return A.dateFormat(this.dateFormat)
},renderBool:function(A)
{
  return A ? "true" : "false"
},isCellEditable:function(A, B)
{
  return A == 1
},getRenderer:function(A)
{
  return A == 1 ? this.renderCellDelegate : this.renderPropDelegate
},renderProp:function(A)
{
  return this.getPropertyName(A)
},renderCell:function(A)
{
  var B = A;
  if (A instanceof Date)
  {
    B = this.renderDate(A)
  } else
  {
    if (typeof A == "boolean")
    {
      B = this.renderBool(A)
    }
  }
  return Ext.util.Format.htmlEncode(B)
},getPropertyName:function(B)
{
  var A = this.grid.propertyNames;
  return A && A[B] ? A[B] : B
},getCellEditor:function(A, E)
{
  var B = this.store.getProperty(E);
  var D = B.data["name"],C = B.data["value"];
  if (this.grid.customEditors[D])
  {
    return this.grid.customEditors[D]
  }
  if (C instanceof Date)
  {
    return this.editors["date"]
  } else
  {
    if (typeof C == "number")
    {
      return this.editors["number"]
    } else
    {
      if (typeof C == "boolean")
      {
        return this.editors["boolean"]
      } else
      {
        return this.editors["string"]
      }
    }
  }
}});
Ext.grid.PropertyGrid = function(B, D)
{
  D = D || {};
  var C = new Ext.grid.PropertyStore(this);
  this.store = C;
  var A = new Ext.grid.PropertyColumnModel(this, C);
  C.store.sort("name", "ASC");
  Ext.grid.PropertyGrid.superclass.constructor.call(this, B, Ext.apply({ds:C.store,cm:A,enableColLock:false,enableColumnMove:false,stripeRows:false,trackMouseOver:false,clicksToEdit:1}, D));
  this.getGridEl().addClass("x-props-grid");
  this.lastEditRow = null;
  this.on("columnresize", this.onColumnResize, this);
  this.addEvents({beforepropertychange:true,propertychange:true});
  this.customEditors = this.customEditors || {}
};
Ext.extend(Ext.grid.PropertyGrid, Ext.grid.EditorGrid, {render:function()
{
  Ext.grid.PropertyGrid.superclass.render.call(this);
  this.autoSize.defer(100, this)
},autoSize:function()
{
  Ext.grid.PropertyGrid.superclass.autoSize.call(this);
  if (this.view)
  {
    this.view.fitColumns()
  }
},onColumnResize:function()
{
  this.colModel.setColumnWidth(1, this.container.getWidth(true) - this.colModel.getColumnWidth(0));
  this.autoSize()
},setSource:function(A)
{
  this.store.setSource(A)
},getSource:function()
{
  return this.store.getSource()
}});
Ext.LoadMask = function(C, B)
{
  this.el = Ext.get(C);
  Ext.apply(this, B);
  if (this.store)
  {
    this.store.on("beforeload", this.onBeforeLoad, this);
    this.store.on("load", this.onLoad, this);
    this.store.on("loadexception", this.onLoad, this);
    this.removeMask = false
  } else
  {
    var A = this.el.getUpdateManager();
    A.showLoadIndicator = false;
    A.on("beforeupdate", this.onBeforeLoad, this);
    A.on("update", this.onLoad, this);
    A.on("failure", this.onLoad, this);
    this.removeMask = true
  }
};
Ext.LoadMask.prototype = {msg:"Loading...",msgCls:"x-mask-loading",disabled:false,disable:function()
{
  this.disabled = true
},enable:function()
{
  this.disabled = false
},onLoad:function()
{
  this.el.unmask(this.removeMask)
},onBeforeLoad:function()
{
  if (!this.disabled)
  {
    this.el.mask(this.msg, this.msgCls)
  }
},destroy:function()
{
  if (this.store)
  {
    this.store.un("beforeload", this.onBeforeLoad, this);
    this.store.un("load", this.onLoad, this);
    this.store.un("loadexception", this.onLoad, this)
  } else
  {
    var A = this.el.getUpdateManager();
    A.un("beforeupdate", this.onBeforeLoad, this);
    A.un("update", this.onLoad, this);
    A.un("failure", this.onLoad, this)
  }
}};